网络流EK算法洛谷P3376 day4

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 5e3 + 5;
 5 ll n, m, s, t, ee = 2;
 6 int flg[1000][1000], vis[1000], h[1000];
 7 struct edge{
 8     ll v, next, val;
 9 }e[N << 1];
10 
11 void addedge(ll u, ll v, ll w)
12 {
13     e[ee] = (edge){v, h[u], w};
14     h[u] = ee++;
15 }
16 
17 struct Pre{
18     ll v, e_id;
19 }pre[N];
20 
21 ll bfs()
22 {
23     memset(vis, 0, sizeof(vis));
24     //memset(pre, -1, sizeof(pre));
25     vis[s] = 1;
26     queue<int>q;
27     q.push(s);
28     while(q.size())
29     {
30         ll u = q.front();
31         q.pop();
32         for(ll i = h[u]; i; i = e[i].next)
33         {
34             ll v = e[i].v;
35             if(!vis[v] && e[i].val)
36             {
37                 pre[v].v = u;
38                 pre[v].e_id = i;
39                 if(v == t)return 1;
40                 vis[v] = 1;
41                 q.push(v);
42             }
43         }
44     }
45     return 0;
46 }
47 ll EK()
48 {
49     ll ans = 0;
50     while(bfs())
51     {
52         ll mi = INT_MAX;
53         for(int i = t; i != s; i = pre[i].v)mi = min(mi, e[pre[i].e_id].val);
54         for(int i = t; i != s; i = pre[i].v)
55         {
56             e[pre[i].e_id].val -= mi;
57             e[pre[i].e_id ^ 1].val += mi;
58         }
59         ans += mi;
60     }
61     return ans;
62 }
63 int main()
64 {
65     ios::sync_with_stdio(false); cin.tie(0);
66     //freopen("P3376_9.in","r",stdin);    
67     cin >> n >> m >> s >> t;
68     ll u, v, w;
69     for(int i = 1; i <= m; i++)
70     {
71         cin >> u >> v >> w;
72         if(!flg[u][v])
73         {
74             flg[u][v] = ee;
75             addedge(u, v, w);
76             addedge(v, u, 0);
77         }
78         else e[flg[u][v]].val += w;
79     }
80     cout << EK() <<"\n";
81     return 0;    
82 } 
复制代码

 

posted @   matt-11  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示