标签:lin format name ret term eof his ace panel
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18648 Accepted Submission(s):
8845
题目多组测试数据!!!
每组数据的初始化变量数组!!!
n才是边!!!
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<queue> 5 6 using namespace std; 7 8 const int INF = 100000; 9 const int MAXN = 2100; 10 struct Edge{ 11 int to,nxt,c; 12 }e[MAXN]; 13 int head[MAXN],dis[MAXN]; 14 int tot,s,t; 15 queue<int>q; 16 17 inline int read() 18 { 19 int x = 0,f = 1;char ch = getchar(); 20 for (; ch<‘0‘||ch>‘9‘; ch = getchar()) 21 if (ch==‘-‘) f = -1; 22 for (; ch>=‘0‘&&ch<=‘9‘; ch = getchar()) 23 x = x*10+ch-‘0‘; 24 return x*f; 25 } 26 inline void add_edge(int u,int v,int w) 27 { 28 ++tot; 29 e[tot].to = v,e[tot].nxt = head[u],e[tot].c = w; 30 head[u] = tot; 31 ++tot; 32 e[tot].to = u,e[tot].nxt = head[v],e[tot].c = 0; 33 head[v] = tot; 34 } 35 inline bool bfs() 36 { 37 memset(dis,-1,sizeof(dis)); 38 q.push(s); 39 dis[s] = 0; 40 while (!q.empty()) 41 { 42 int u = q.front(); 43 q.pop(); 44 for (int i=head[u]; i; i=e[i].nxt) 45 { 46 int v = e[i].to; 47 if (dis[v]==-1 && e[i].c>0) 48 { 49 dis[v] = dis[u]+1; 50 q.push(v); 51 } 52 } 53 } 54 if (dis[t]!=-1) return true; 55 return false; 56 } 57 int dfs(int u,int cp) 58 { 59 if (u==t) return cp; 60 int w,tmp = cp; 61 for (int i=head[u]; i; i=e[i].nxt) 62 { 63 int v = e[i].to; 64 if (dis[v]==dis[u]+1 && e[i].c>0) 65 { 66 w = dfs(v,min(cp,e[i].c)); 67 e[i].c -= w; 68 e[i^1].c += w; 69 cp -= w; 70 } 71 } 72 return tmp-cp; 73 } 74 int main() 75 { 76 int n,m,ans; 77 while (scanf("%d%d",&n,&m)!=EOF) 78 { 79 memset(head,0,sizeof(head));//初始化 80 tot = 1; 81 s = 1,t = m; 82 for (int x,y,z,i=1; i<=n; ++i) 83 { 84 x = read(),y = read(),z = read(); 85 add_edge(x,y,z); 86 } 87 ans = 0; 88 while (bfs()) 89 ans += dfs(s,INF); 90 printf("%d\n",ans); 91 } 92 return 0; 93 }
标签:lin format name ret term eof his ace panel
原文地址:http://www.cnblogs.com/mjtcn/p/7355847.html