Submission #33655383
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/scc>
#include <atcoder/mincostflow>
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
#define per(i,a,n) for (ll i=n;i-->(ll)a;)
#define pb push_back
ll read(){ll r;scanf("%lld",&r);return r;} // read
int main() {
int N = read();
int M = read();
int K = read();
vector<int> A(M), B(M);
atcoder::scc_graph graph(N); // 0-index 点
rep(i,0,M){
A[i] = read() - 1; // 0-index
B[i] = read() - 1;
graph.add_edge(A[i], B[i]);
}
const vector<vector<int>> scc = graph.scc(); // 连通块
const int V = scc.size(); // DAG节点个数
vector<int> belongs(N); // [节点] = 所在块
rep(i,0,V) for(int u : scc[i]) belongs[u] = i;
vector<ll> X(V); // 新图每个点上的 值
rep(i,0,N){
int x = read();
X[belongs[i]] += x;
}
vector<ll> accum(V + 1, 0); // 前缀和
rep(i,0,V) accum[i + 1] = accum[i] + X[i];
atcoder::mcf_graph<int, ll> network(2 * V + 1); // in[1]变成 S
int S = 2*belongs[0];
int T = 2*V;
rep(i,0,V) {
network.add_edge(2 * i, 2 * i + 1, 1, 0); // in[i] -> out[i], 容量1, 费用 -X[i] + X[i]
network.add_edge(2 * i, 2 * i + 1, K, X[i]); // in[i] -> out[i], 容量K(无穷), 费用 0 + X[i]
network.add_edge(2 * i + 1, 2 * V, K, accum[V] - accum[i + 1]); // out[i] -> T 费用 0 + All - X[0..i]
}
rep(i,0,M) {
int u = belongs[A[i]];
int v = belongs[B[i]];
// assert(accum[v] - accum[u + 1]); 保证不了啊 如果是拓扑则可以
if (u != v) network.add_edge(2 * u + 1, 2 * v, K, accum[v] - accum[u + 1]); // out[u] -> in[v] , 容量k, 费用 0 + X[0..v] - X[0..u]
}
auto [maxflow, mincost] = network.flow(S,T,K);
printf("%lld\n",(accum[V] - accum[belongs[0]]) * K - mincost);
}
Submission Info
Submission Time |
|
Task |
H - Collecting |
User |
cromarmot |
Language |
C++ (GCC 9.2.1) |
Score |
600 |
Code Size |
1774 Byte |
Status |
AC |
Exec Time |
256 ms |
Memory |
164236 KiB |
Compile Error
./Main.cpp: In function ‘ll read()’:
./Main.cpp:11:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
11 | ll read(){ll r;scanf("%lld",&r);return r;} // read
| ~~~~~^~~~~~~~~~~
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
600 / 600 |
Status |
|
|
Set Name |
Test Cases |
Sample |
example_00.txt, example_01.txt |
All |
chain_00.txt, chain_01.txt, chain_02.txt, chain_03.txt, chain_04.txt, chain_05.txt, chain_06.txt, chain_07.txt, chain_08.txt, chain_09.txt, dense_00.txt, dense_01.txt, dense_02.txt, dense_03.txt, dense_04.txt, dense_05.txt, dense_06.txt, dense_07.txt, dense_08.txt, dense_09.txt, example_00.txt, example_01.txt, handmade_00.txt, handmade_01.txt, handmade_02.txt, line_00.txt, line_01.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt |
Case Name |
Status |
Exec Time |
Memory |
chain_00.txt |
AC |
233 ms |
147080 KiB |
chain_01.txt |
AC |
256 ms |
140148 KiB |
chain_02.txt |
AC |
213 ms |
141412 KiB |
chain_03.txt |
AC |
244 ms |
139972 KiB |
chain_04.txt |
AC |
237 ms |
150960 KiB |
chain_05.txt |
AC |
175 ms |
112348 KiB |
chain_06.txt |
AC |
232 ms |
140756 KiB |
chain_07.txt |
AC |
240 ms |
144148 KiB |
chain_08.txt |
AC |
213 ms |
141596 KiB |
chain_09.txt |
AC |
242 ms |
141888 KiB |
dense_00.txt |
AC |
73 ms |
30136 KiB |
dense_01.txt |
AC |
90 ms |
31324 KiB |
dense_02.txt |
AC |
88 ms |
30844 KiB |
dense_03.txt |
AC |
67 ms |
28972 KiB |
dense_04.txt |
AC |
95 ms |
33436 KiB |
dense_05.txt |
AC |
64 ms |
22868 KiB |
dense_06.txt |
AC |
78 ms |
31488 KiB |
dense_07.txt |
AC |
66 ms |
22716 KiB |
dense_08.txt |
AC |
72 ms |
25444 KiB |
dense_09.txt |
AC |
77 ms |
26936 KiB |
example_00.txt |
AC |
2 ms |
3740 KiB |
example_01.txt |
AC |
2 ms |
3784 KiB |
handmade_00.txt |
AC |
2 ms |
3784 KiB |
handmade_01.txt |
AC |
63 ms |
35756 KiB |
handmade_02.txt |
AC |
57 ms |
34328 KiB |
line_00.txt |
AC |
240 ms |
164236 KiB |
line_01.txt |
AC |
242 ms |
164072 KiB |
random_00.txt |
AC |
234 ms |
139176 KiB |
random_01.txt |
AC |
235 ms |
139048 KiB |
random_02.txt |
AC |
35 ms |
6348 KiB |
random_03.txt |
AC |
38 ms |
6472 KiB |
random_04.txt |
AC |
32 ms |
5936 KiB |
random_05.txt |
AC |
39 ms |
7124 KiB |
random_06.txt |
AC |
102 ms |
66168 KiB |
random_07.txt |
AC |
186 ms |
114940 KiB |
random_08.txt |
AC |
86 ms |
33660 KiB |
random_09.txt |
AC |
183 ms |
114320 KiB |