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 }