# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
88717 | 2018-12-07T18:43:19 Z | popovicirobert | Pipes (BOI13_pipes) | C++14 | 288 ms | 22548 KB |
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long // 217 // 44 using namespace std; const int MAXM = (int) 5e5; const int MAXN = (int) 1e5; vector < pair <int, int> > g[MAXN + 1]; int even[MAXN + 1], father[MAXN + 1], n; bool vis[MAXN + 1]; void dfs(int nod) { vis[nod] = 1; for(auto it : g[nod]) { if(vis[it.first] == 0) { even[it.first] = (even[nod] ^ 1); father[it.first] = nod; dfs(it.first); } } } inline void detect_cycle(bool &cycle) { memset(even, -1, sizeof(even)); even[1] = 0; dfs(1); int cnt = 0; for(int i = 1; i <= n; i++) { for(auto it : g[i]) { if(even[i] != even[it.first] && !(father[it.first] == i || father[i] == it.first)) { cout << 0; exit(0); } if(even[i] == even[it.first]) { cnt++; } } } cnt /= 2; if(cnt > 1) { cout << 0; exit(0); } if(cnt) { cycle = 1; } } ll c[MAXN + 1]; ll sol[MAXM + 1]; int deg[MAXN + 1]; inline void solve_tree(bool cycle) { int i; memset(father, 0, sizeof(father)); memset(vis, 0, sizeof(vis)); queue <int> Q; for(i = 1; i <= n; i++) { if(g[i].size() == 1) { Q.push(i); vis[i] = 1; } } int root; while(Q.size()) { int nod = Q.front(); root = nod; Q.pop(); for(auto it : g[nod]) { if(father[it.first] != nod) { deg[it.first]++; father[nod] = it.first; sol[it.second] = c[nod]; c[it.first] -= c[nod]; c[nod] = 0; if(deg[it.first] + 1 == g[it.first].size()) { Q.push(it.first); vis[it.first] = 1; } } } } if(cycle == 0) { for(i = 1; i <= n; i++) { if(c[i] != 0) { cout << 0; exit(0); } } } } void dfs1(int nod, vector < pair <int, int> > &nodes, int par, int root) { vis[nod] = 1; for(auto it : g[nod]) { if(it.first == par) { continue; } if(vis[it.first] == 0) { nodes.push_back({nod, it.second}); dfs1(it.first, nodes, nod, root); } else if(it.first == root) { nodes.push_back({nod, it.second}); } } } inline void solve_cycle(bool cycle) { if(cycle == 0) { return ; } int i, nod; for(i = 1; i <= n; i++) { if(vis[i] == 0) { nod = i; break; } } vector < pair <int, int> > nodes; dfs1(nod, nodes, 0, nod); int sz = nodes.size(); ll tot = 0; for(auto it : nodes) { tot += c[it.first]; } tot /= 2; ll sum = 0; for(i = 0; i + 1 < sz; i += 2) { sum += c[nodes[i].first]; } sol[nodes[sz - 2].second] = tot - sum; c[nodes[sz - 2].first] -= tot - sum; for(i = sz - 3; i >= 0; i--) { sol[nodes[i].second] = c[nodes[i + 1].first]; c[nodes[i].first] -= sol[nodes[i].second]; } sum = 0; for(auto it : nodes) { sum += sol[it.second]; } sol[nodes.back().second] = tot - sum; } int main() { //ifstream cin("A.in"); //ofstream cout("A.out"); int i, m; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n >> m; for(i = 1; i <= n; i++) { cin >> c[i]; c[i] *= 2LL; } for(i = 1; i <= m; i++) { int x, y; cin >> x >> y; g[x].push_back({y, i}); g[y].push_back({x, i}); } bool cycle = 0; detect_cycle(cycle); solve_tree(cycle); solve_cycle(cycle); for(i = 1; i <= m; i++) { cout << sol[i] << "\n"; } //cin.close(); //cout.close(); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 3580 KB | Output is correct |
2 | Correct | 4 ms | 3708 KB | Output is correct |
3 | Correct | 5 ms | 3784 KB | Output is correct |
4 | Correct | 93 ms | 10108 KB | Output is correct |
5 | Correct | 5 ms | 10108 KB | Output is correct |
6 | Correct | 4 ms | 10108 KB | Output is correct |
7 | Correct | 4 ms | 10108 KB | Output is correct |
8 | Correct | 5 ms | 10108 KB | Output is correct |
9 | Correct | 5 ms | 10108 KB | Output is correct |
10 | Correct | 5 ms | 10108 KB | Output is correct |
11 | Correct | 5 ms | 10108 KB | Output is correct |
12 | Correct | 5 ms | 10108 KB | Output is correct |
13 | Correct | 67 ms | 10108 KB | Output is correct |
14 | Correct | 80 ms | 10108 KB | Output is correct |
15 | Correct | 86 ms | 10220 KB | Output is correct |
16 | Correct | 76 ms | 10220 KB | Output is correct |
17 | Correct | 89 ms | 10244 KB | Output is correct |
18 | Correct | 90 ms | 10244 KB | Output is correct |
19 | Correct | 100 ms | 11836 KB | Output is correct |
20 | Correct | 5 ms | 11836 KB | Output is correct |
21 | Correct | 5 ms | 11836 KB | Output is correct |
22 | Correct | 85 ms | 11836 KB | Output is correct |
23 | Correct | 67 ms | 11836 KB | Output is correct |
24 | Correct | 97 ms | 11836 KB | Output is correct |
25 | Correct | 75 ms | 11836 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 11836 KB | Output is correct |
2 | Correct | 5 ms | 11836 KB | Output is correct |
3 | Correct | 73 ms | 11836 KB | Output is correct |
4 | Correct | 80 ms | 11836 KB | Output is correct |
5 | Correct | 72 ms | 11836 KB | Output is correct |
6 | Correct | 279 ms | 22372 KB | Output is correct |
7 | Correct | 4 ms | 22372 KB | Output is correct |
8 | Correct | 4 ms | 22372 KB | Output is correct |
9 | Correct | 4 ms | 22372 KB | Output is correct |
10 | Correct | 4 ms | 22372 KB | Output is correct |
11 | Correct | 4 ms | 22372 KB | Output is correct |
12 | Correct | 4 ms | 22372 KB | Output is correct |
13 | Correct | 5 ms | 22372 KB | Output is correct |
14 | Correct | 4 ms | 22372 KB | Output is correct |
15 | Correct | 5 ms | 22372 KB | Output is correct |
16 | Correct | 5 ms | 22372 KB | Output is correct |
17 | Correct | 4 ms | 22372 KB | Output is correct |
18 | Correct | 5 ms | 22372 KB | Output is correct |
19 | Correct | 4 ms | 22372 KB | Output is correct |
20 | Correct | 5 ms | 22372 KB | Output is correct |
21 | Correct | 5 ms | 22372 KB | Output is correct |
22 | Correct | 5 ms | 22372 KB | Output is correct |
23 | Correct | 82 ms | 22372 KB | Output is correct |
24 | Correct | 117 ms | 22372 KB | Output is correct |
25 | Correct | 69 ms | 22372 KB | Output is correct |
26 | Correct | 77 ms | 22372 KB | Output is correct |
27 | Correct | 74 ms | 22372 KB | Output is correct |
28 | Correct | 75 ms | 22372 KB | Output is correct |
29 | Correct | 233 ms | 22372 KB | Output is correct |
30 | Correct | 101 ms | 22372 KB | Output is correct |
31 | Correct | 104 ms | 22372 KB | Output is correct |
32 | Correct | 92 ms | 22372 KB | Output is correct |
33 | Correct | 71 ms | 22372 KB | Output is correct |
34 | Correct | 73 ms | 22372 KB | Output is correct |
35 | Correct | 77 ms | 22372 KB | Output is correct |
36 | Correct | 68 ms | 22372 KB | Output is correct |
37 | Correct | 288 ms | 22548 KB | Output is correct |
38 | Correct | 113 ms | 22548 KB | Output is correct |
39 | Correct | 87 ms | 22548 KB | Output is correct |
40 | Correct | 100 ms | 22548 KB | Output is correct |
41 | Correct | 79 ms | 22548 KB | Output is correct |
42 | Correct | 74 ms | 22548 KB | Output is correct |
43 | Correct | 81 ms | 22548 KB | Output is correct |
44 | Correct | 68 ms | 22548 KB | Output is correct |
45 | Correct | 206 ms | 22548 KB | Output is correct |
46 | Correct | 106 ms | 22548 KB | Output is correct |
47 | Correct | 113 ms | 22548 KB | Output is correct |
48 | Correct | 101 ms | 22548 KB | Output is correct |
49 | Correct | 66 ms | 22548 KB | Output is correct |
50 | Correct | 80 ms | 22548 KB | Output is correct |
51 | Correct | 78 ms | 22548 KB | Output is correct |
52 | Correct | 79 ms | 22548 KB | Output is correct |
53 | Correct | 219 ms | 22548 KB | Output is correct |
54 | Correct | 105 ms | 22548 KB | Output is correct |