洛谷 P2762 太空飞行计划问题 【最大权闭合子图+最小割】
2018-02-06 14:33
381 查看
……一道难在读入的题。
最后解决方案直接getline一行然后是把读优拆掉放进函数,虽然很丑但是过了。
然后就是裸的最大权闭合子图了,把仪器当成负权点向t连流量为其价格的边,s向实验连流量为实验报酬的边,实验向所有它所需要的仪器连流量为inf的边表示不可割断。然后跑最大流即可。
关于输出方案,直接看dinic最后一次bfs的level数组即可,扫到的就是在方案里的。
#include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<string> using namespace std; const int N=1000005,inf=1e9; int n,m,h ,cnt=1,s,t,le ,sum; bool vs ,vt ; string c; struct qwe { int ne,to,va; }e[N<<1]; void add(int u,int v,int w) { cnt++; e[cnt].ne=h[u]; e[cnt].to=v; e[cnt].va=w; h[u]=cnt; } void ins(int u,int v,int w) {//cout<<u<<" "<<v<<" "<<w<<endl; add(u,v,w); add(v,u,0); } bool bfs() { queue<int>q; memset(le,0,sizeof(le)); le[s]=1; q.push(s); while(!q.empty()) { int u=q.front(); q.pop(); for(int i=h[u];i;i=e[i].ne) if(e[i].va>0&&!le[e[i].to]) { le[e[i].to]=le[u]+1; q.push(e[i].to); } } return le[t]; } int dfs(int u,int f) { if(u==t||f==0) return f; int us=0; for(int i=h[u];i&&us<f;i=e[i].ne) if(e[i].va>0&&le[e[i].to]==le[u]+1) { int t=dfs(e[i].to,min(e[i].va,f-us)); e[i].va-=t; e[i^1].va+=t; us+=t; } if(!us) le[u]=0; return us; } int dinic() { int re=0; while(bfs()) re+=dfs(s,inf); return re; } int main() { scanf("%d%d\n",&m,&n); s=0,t=n+m+1; for(int i=1;i<=m;i++) { getline(cin,c); int j=0,v=0; while(c[j]>'9'||c[j]<'0'&&j<c.size()) j++; while(c[j]>='0'&&c[j]<='9'&&j<c.size()) { v=v*10+c[j]-48; j++; } ins(s,i,v); sum+=v; while(j<c.size()) { int x=0; while(c[j]>'9'||c[j]<'0'&&j<c.size()) j++; if(j>=c.size()) break; while(c[j]>='0'&&c[j]<='9'&&j<c.size()) { x=x*10+c[j]-48; j++; } ins(i,x+m,inf); } } for(int i=1;i<=n;i++) { int x; scanf("%d",&x); ins(i+m,t,x); } int ans=sum-dinic(); for(int i=1;i<=m;i++) if(le[i]) printf("%d ",i); puts(""); for(int i=m+1;i<=n+m;i++) if(le[i]) printf("%d ",i-m); puts(""); printf("%d\n",ans); return 0; } /* 2 3 10 1 2 25 2 3 5 6 7 */
相关文章推荐
- 洛谷 P2762 太空飞行计划问题 P3410 拍照【最大权闭合子图】题解+代码
- 网络流24题 太空飞行计划问题___最大权闭合子图
- 【网络流二十四题 太空飞行计划问题】【最大权闭合图->最小割】
- [luoguP2762] 太空飞行计划问题(最大权闭合图—最小割—最大流)
- [SWUSTOJ1737] 太空飞行计划问题(最大权闭合子图,记录路径)
- 【网络流24题】太空飞行计划(最大权闭合图+最小割)
- 洛谷 P2762 太空飞行计划问题
- loj6001「网络流 24 题」太空飞行计划(最大权闭合图+最小割)
- 线性规划与网络流24题の2 太空飞行计划问题(最大权闭合图问题)
- 洛谷 P2762 太空飞行计划问题
- 【网络流24题 太空飞行计划】最大权闭合子图
- loj #6001. 「网络流 24 题」太空飞行计划(最大权闭合子图)
- LOJ 6001 太空飞行计划 (最大权闭合图+打印最小割)
- 网络流24题之太空飞行计划——最大权闭合子图
- [网络流24题][洛谷P2762]太空飞行计划问题
- LOJ 「网络流 24 题」太空飞行计划(最大权闭合子图)
- 洛谷 P2762 太空飞行计划问题
- 网络流24题之二 太空飞行计划 最大权闭合子图
- 【网络流24题】 No.2 太空飞行计划问题 (最大闭合权图 最大流 )
- Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)