Task: | Download Speed |
Sender: | minghao |
Submission time: | 2024-10-24 19:35:08 +0300 |
Language: | C++ (C++20) |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.00 s | details |
#2 | ACCEPTED | 0.01 s | details |
#3 | ACCEPTED | 0.00 s | details |
#4 | ACCEPTED | 0.00 s | details |
#5 | ACCEPTED | 0.01 s | details |
#6 | ACCEPTED | 0.01 s | details |
#7 | ACCEPTED | 0.01 s | details |
#8 | ACCEPTED | 0.00 s | details |
#9 | ACCEPTED | 0.00 s | details |
#10 | ACCEPTED | 0.00 s | details |
#11 | ACCEPTED | 0.01 s | details |
#12 | ACCEPTED | 0.00 s | details |
Compiler report
input/code.cpp: In member function 'LL EK::Maxflow(LL, LL)': input/code.cpp:49:26: warning: comparison of integer expressions of different signedness: 'LL' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare] 49 | for (LL i = 0; i < G[x].size(); i++) { | ~~^~~~~~~~~~~~~
Code
#include<bits/stdc++.h>using namespace std;typedef long long LL;const LL N=1005, INF=0x7ffffffffffffff;struct Edge {LL from, to, cap, flow;Edge(LL u, LL v, LL c, LL f) :from(u), to(v), cap(c), flow(f) {}};vector<vector<LL> > ans;struct EK {LL n, m;vector<Edge> edges;vector<LL> G[N];LL a[N], p[N];// a:点 x -> BFS 过程中最近接近点 x 的边给它的最大流// p:点 x -> BFS 过程中最近接近点 x 的边void init(LL n_) {n = n_;for (LL i = 0; i < n; i++)G[i].clear();edges.clear();}void AddEdge(LL from, LL to, LL cap) {edges.push_back(Edge(from, to, cap, 0));edges.push_back(Edge(to, from, 0, 0));m = edges.size();G[from].push_back(m - 2);G[to].push_back(m - 1);}LL Maxflow(LL s, LL t) {LL flow = 0;while(true) {memset(a, 0, sizeof(a));queue<LL> Q;Q.push(s);a[s] = INF;while (!Q.empty()) {LL x = Q.front();Q.pop();for (LL i = 0; i < G[x].size(); i++) {// 遍历以 x 作为起点的边Edge& e = edges[G[x][i]];if (!a[e.to] && e.cap > e.flow) {// G[x][i] 是最近接近点 e.to 的边p[e.to] = G[x][i];// 最近接近点 e.to 的边赋给它的流a[e.to] = min(a[x], e.cap - e.flow);Q.push(e.to);}}if (a[t]) break;}// 如果汇点没有接受到流,说明源点和汇点不在同一个连通分量上if (!a[t]) break;for (LL u = t; u != s; u = edges[p[u]].from) {// 通过 u 追寻 BFS 过程中 s -> t 的路径edges[p[u]].flow += a[t];edges[p[u] ^ 1].flow -= a[t];}flow += a[t];}return flow;}}graph;int main(){LL n, m;cin >> n >> m;graph.init(n);for(LL i=1; i<=m; i++){LL a, b, c;cin >> a >> b >> c;graph.AddEdge(a, b, c);}cout << graph.Maxflow(1, n) << endl;return 0;}
Test details
Test 1
Verdict: ACCEPTED
input |
---|
4 3 1 2 5 2 3 3 3 4 6 |
correct output |
---|
3 |
user output |
---|
3 |
Test 2
Verdict: ACCEPTED
input |
---|
4 5 1 2 1 1 3 1 2 3 1 2 4 1 ... |
correct output |
---|
2 |
user output |
---|
2 |
Test 3
Verdict: ACCEPTED
input |
---|
4 5 1 2 1000000000 1 3 1000000000 2 3 1 2 4 1000000000 ... |
correct output |
---|
2000000000 |
user output |
---|
2000000000 |
Test 4
Verdict: ACCEPTED
input |
---|
2 1 2 1 100 |
correct output |
---|
0 |
user output |
---|
0 |
Test 5
Verdict: ACCEPTED
input |
---|
2 1000 1 2 1000000000 1 2 1000000000 1 2 1000000000 1 2 1000000000 ... |
correct output |
---|
1000000000000 |
user output |
---|
1000000000000 |
Test 6
Verdict: ACCEPTED
input |
---|
500 998 1 2 54 1 3 59 1 4 83 2 5 79 ... |
correct output |
---|
60 |
user output |
---|
60 |
Test 7
Verdict: ACCEPTED
input |
---|
500 998 1 2 530873053 1 3 156306296 1 4 478040476 3 5 303609600 ... |
correct output |
---|
1093765123 |
user output |
---|
1093765123 |
Test 8
Verdict: ACCEPTED
input |
---|
2 1 1 2 1 |
correct output |
---|
1 |
user output |
---|
1 |
Test 9
Verdict: ACCEPTED
input |
---|
4 5 1 2 3 2 4 2 1 3 4 3 4 5 ... |
correct output |
---|
6 |
user output |
---|
6 |
Test 10
Verdict: ACCEPTED
input |
---|
4 5 1 2 1 1 3 2 3 2 1 2 4 2 ... |
correct output |
---|
3 |
user output |
---|
3 |
Test 11
Verdict: ACCEPTED
input |
---|
10 999 1 2 1000000000 1 2 1000000000 1 2 1000000000 1 2 1000000000 ... |
correct output |
---|
111000000000 |
user output |
---|
111000000000 |
Test 12
Verdict: ACCEPTED
input |
---|
7 9 1 2 1 1 3 1 1 4 1 2 5 1 ... |
correct output |
---|
2 |
user output |
---|
2 |