首页 > 其他 > 详细

【洛谷P2936】全流

时间:2019-03-09 15:52:45      阅读:155      评论:0      收藏:0      [点我收藏+]

本人今天刚刚学会最大流,此题感觉完全没有提高+的难度,仅仅是一个模板最大流,我用了Dinic算法,而且本题数据很小,邻接矩阵存图即可。

注意:本题大小写字母均包括在内!!

被卡了一次10分

Dinic模板的代码 (AC本题)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 using namespace std;
 6 const int INF=99999999;
 7 queue<int>q;
 8 int n,w[257][257],d[257];
 9 inline bool bfs()
10 {
11     memset(d,0,sizeof(d));
12     d[A]=1;
13     q.push(A);
14     while(!q.empty())
15     {
16         int now=q.front();
17         q.pop();
18         for(int i=A;i<=z;i++)   //一定要到小写z
19             if(w[now][i]>0&&d[i]==0)
20             {
21                 d[i]=d[now]+1;
22                 q.push(i);
23             }
24     }
25     return d[Z]!=0;
26 }
27 int dfs(int now,int dist)
28 {
29     if(now==Z) return dist;
30     for(int i=A;i<=z;i++)  //同上
31         if(d[i]==d[now]+1&&w[now][i]>0)
32         {
33             int x=dfs(i,min(dist,w[now][i]));
34             if(x>0)
35             {
36                 w[now][i]-=x;
37                 w[i][now]+=x;
38                 return x;
39             }
40         }
41     return 0;
42 }
43 int main()
44 {
45     cin>>n;
46     for(int i=1;i<=n;i++)
47     {
48         char x,y;
49         int z;
50         cin>>x>>y>>z;
51         w[x][y]+=z;
52     }
53     int ans=0;
54     while(bfs())
55     {
56         while(int di=dfs(A,INF))
57             ans+=di;
58     }
59     cout<<ans;
60     return 0;
61 }

 

【洛谷P2936】全流

原文:https://www.cnblogs.com/shl-blog/p/10500790.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!