hdu 1532 Drainage Ditches(最大网络流)

 

http://acm.hdu.edu.cn/showproblem.php?pid=1532

 

解题思路:网络流模板

 

#include <stdio.h> #define Max 205 int N,M; int Graph[Max][Max]; int pre[Max];/*记录前驱点*/ bool visited[Max]; void InitGraph() { int i,j; for(i=1;i<=M;i++) { for(j=1;j<=M;j++) Graph[i][j] = 0; } } struct Queue { int val[Max]; int front,tail; Queue(){front = tail = 0;} int Pop() { return val[front++]; } void Push(int x) { val[tail++] = x; } bool empty() { if(front==tail) return true; return false; } }; bool BFS() { int u,v,i; Queue q; bool flag = false; for (i=1;i<=M;i++) { pre[i] = -1; visited[i] = 0; } q.Push(1); visited[1] = 1; while (!q.empty()&&!flag) { u = q.Pop(); for (v=1;v<=M;v++) { if (!visited[v]&&Graph[u][v]) { visited[v] = 1; pre[v] = u; q.Push(v); if(v==M) { flag = true; break; } } } visited[u] = 1; } return flag; } int GetMaxFlow() { int MaxFlow = 0,min,u,v; while (BFS()) { v = M; min = 0x7fffffff; while (v!=1) { u = pre[v]; if(min>Graph[u][v]) min = Graph[u][v]; v = u; } v = M; while (v!=1) { u = pre[v]; Graph[u][v]-=min; Graph[v][u]+=min; v = u; } MaxFlow+=min; } return MaxFlow; } int main() { int a,b,c; while (scanf("%d%d",&N,&M)!=EOF) { InitGraph(); while (N--) { scanf("%d%d%d",&a,&b,&c); Graph[a][b]+=c;/*a->b多条路径,所以相加*/ } printf("%d/n",GetMaxFlow()); } return 0; }

你可能感兴趣的:(c,网络,struct,Graph)