首页 > 代码库 > poj 3204 Ikki's Story I - Road Reconstruction 最大流
poj 3204 Ikki's Story I - Road Reconstruction 最大流
题意:
在有向流网络中求有多少条边满足增加其流量能增加总流。
分析:
先求最大流,然后从源汇点沿不满流边染色,边尾被源点染色,边头被汇点染色则计数。
代码:
//poj 3204 //sep 9 #include <iostream> #include <queue> using namespace std; const int maxN=512; const int maxM=10024; struct Edge { int v,f,c,nxt; }e[maxM*2+10]; queue<int> que; int src,sink,n,m; int g[maxN+10]; int nume; int vis[maxN+10]; int dist[maxN+10]; void addedge(int u,int v,int c) { e[++nume].v=v;e[nume].f=c;e[nume].c=c;e[nume].nxt=g[u];g[u]=nume; e[++nume].v=u;e[nume].f=0;e[nume].c=c;e[nume].nxt=g[v];g[v]=nume; } void init() { memset(g,0,sizeof(g)); nume=1; } void bfs() { while(!que.empty()) que.pop(); vis[src]=true; que.push(src); while(!que.empty()){ int u=que.front();que.pop(); for(int i=g[u];i;i=e[i].nxt) if(e[i].f&&!vis[e[i].v]){ que.push(e[i].v); dist[e[i].v]=dist[u]+1; vis[e[i].v]=true; } } } int dfs(int u,int delta) { if(u==sink) return delta; int ret=0; for(int i=g[u];delta&&i;i=e[i].nxt) if(e[i].f&&dist[e[i].v]==dist[u]+1){ int dd=dfs(e[i].v,min(e[i].f,delta)); e[i].f-=dd; e[i^1].f+=dd; delta-=dd; ret+=dd; } return ret; } int dinic() { int ret=0; while(1){ memset(vis,0,sizeof(vis)); memset(dist,0,sizeof(dist)); bfs(); if(!vis[sink]) break; ret+=dfs(src,INT_MAX); } return ret; } int min_cut() { memset(vis,0,sizeof(vis)); while(!que.empty()) que.pop(); que.push(src); vis[src]=1; while(!que.empty()){ int u=que.front();que.pop(); for(int i=g[u];i;i=e[i].nxt){ int v=e[i].v,f=e[i].f; if(!vis[v]&&f>0&&i%2==0){ vis[v]=1; que.push(v); } } } que.push(sink); vis[sink]=2; while(!que.empty()){ int u=que.front();que.pop(); for(int i=g[u];i;i=e[i].nxt){ int v=e[i].v,f=e[i].f; if(!vis[v]&&f<e[i].c&&i%2==1){ vis[v]=2; que.push(v); } } } int ans=0; for(int u=0;u<n;++u) for(int i=g[u];i;i=e[i].nxt){ int v=e[i].v,f=e[i].f; if(vis[u]==1&&vis[v]==2&&i%2==0) ++ans; } return ans; } int main() { while(scanf("%d%d",&n,&m)==2){ init(); while(m--){ int a,b,c; scanf("%d%d%d",&a,&b,&c); addedge(a,b,c); } src=http://www.mamicode.com/0,sink=n-1;>poj 3204 Ikki's Story I - Road Reconstruction 最大流
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。