loj6001「网络流 24 题」太空飞行计划 最小割(最大权闭合图复习)
2017-09-04 21:45
351 查看
题意可知要求最大权闭合图,那么按照结论答案是正权值-最小割(最大流)
复习一下最大权闭合图:
复习一下最大权闭合图:
建图方法:源点S向正权点连容量为权值的边,负权点向汇点T连容量为权值绝对值的边。 正权和负权点之间连容量为inf的边。 证明: 根据题意可知,一对点i,j,假如i为正j为负那么i,j满足依赖关系:选了i一定要选j。 从最小割角度来思考。 我们发现,选择一个正权点即不割掉s到其的边,选择一个负权点即割掉其到t的边。 如果我选了i而不选j,那么S,T联通,不满足最小割性质。 如果i为负而j为正,选择了i而不选j,则割掉了i到t的边,且割掉了s到j的边,则s,t不联通。 由于s到t现在不连通,我们不割这两条边同样s和t是不联通的,那么割这两边不满足割量最小,不符合最小割定义。
#include<cstdio> #include<algorithm> #include<cstring> #include<queue> #define T n+m+5 #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=2e5+5; const int inf=0x7fffffff; int dis ,vis ; int n,m,val ,next ,head ,go ,tot=1; inline void add(int x,int y,int z) { go[++tot]=y; val[tot]=z; next[tot]=head[x]; head[x]=tot; } inline void ins(int x,int y,int z) { add(x,y,z); add(y,x,0); } queue<int> q; int ans; inline bool bfs() { memset(dis,-1,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[0]=0; q.push(0); while (!q.empty()) { int x=q.front(); q.pop(); for(int i=head[x];i;i=next[i]) { int v=go[i]; if (val[i]&&dis[v]==-1) { dis[v]=dis[x]+1; vis[v]=1; q.push(v); } } } return dis[T]!=-1; } inline int dfs(int x,int f) { if (x==T)return f; int w,used=0; for(int i=head[x];i;i=next[i]) { int v=go[i]; if (dis[v]==dis[x]+1&&val[i]) { w=f-used; w=dfs(v,min(w,val[i])); val[i]-=w; val[i^1]+=w; used+=w; if (used==f)return f; } } if (!used)dis[x]=-1; return used; } inline void dinic() { while (bfs()) { ans-=dfs(0,inf); } } inline void getans() { int cnt=0; static int q ; fo(i,1,n)if (vis[i])q[++cnt]=i; fo(i,1,cnt)printf("%d%c",q[i],i==cnt?'\n':' '); memset(q,0,sizeof(q)); cnt=0; fo(i,1,m)if (vis[i+n])q[++cnt]=i; fo(i,1,cnt)printf("%d%c",q[i],i==cnt?'\n':' '); } int main() { scanf("%d%d",&n,&m); fo(i,1,n) { int x; scanf("%d",&x);ans+=x; ins(0,i,x); char ch=getchar(); while ((ch=getchar())!='\n') { x=ch-'0'; while((ch=getchar())&&ch>='0'&&ch<='9')x=x*10+ch-'0'; ins(i,x+n,inf); if(ch=='\n')break; } } fo(i,1,m) { int x; scanf("%d",&x); ins(i+n,T,x); } dinic(); getans(); printf("%d\n",ans); }
相关文章推荐
- loj6001「网络流 24 题」太空飞行计划(最大权闭合图+最小割)
- LOJ 「网络流 24 题」太空飞行计划(最大权闭合子图)
- 网络流24题 太空飞行计划问题___最大权闭合子图
- [网络流24题] 太空飞行计划 (最大权闭合子图---网络最大流)
- 【网络流24题】 No.2 太空飞行计划问题 (最大闭合权图 最大流 )
- 【网络流24题 太空飞行计划】最大权闭合子图
- LOJ6001 「网络流 24 题 - 2」 太空飞行计划 坠大权闭合子图 坠小割
- [网络流24题] 02 太空飞行计划(最大权闭合图, 最大流)
- Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)
- 【网络流24题】太空飞行计划(最大权闭合图+最小割)
- loj #6001. 「网络流 24 题」太空飞行计划(最大权闭合子图)
- 线性规划与网络流24题第2题 太空飞行计划 最大权闭合图
- Luogu 2762 太空飞行计划 / Libre 6001 「网络流 24 题」太空飞行计划 (网络流,最大流)
- 线性规划与网络流24题の2 太空飞行计划问题(最大权闭合图问题)
- LOJ6001 - 「网络流 24 题」太空飞行计划
- 线性规划与网络流24题之太空飞行计划 最大权闭合图
- LOJ6001 - 「网络流 24 题」太空飞行计划
- 最大流——Luogu2762 [网络流24题]太空飞行计划问题
- 【网络流二十四题 太空飞行计划问题】【最大权闭合图->最小割】
- 网络流24题之二 太空飞行计划 最大权闭合子图