#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 check() {
for(int i = 1; i <= n; i++) {
if(c[i] != 0) {
while(1) {
}
cout << 0;
exit(0);
}
}
}
inline void solve_tree(bool cycle) {
int i;
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;
}
}
while(Q.size()) {
int nod = Q.front();
Q.pop();
for(auto it : g[nod]) {
if(vis[it.first] == 0) {
deg[it.first]++;
sol[it.second] = c[nod];
c[it.first] -= c[nod];
c[nod] = 0;
if(deg[it.first] + 1 == g[it.first].size()) {
vis[it.first] = 1;
Q.push(it.first);
}
}
}
}
if(cycle == 0) {
check();
}
}
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
pipes.cpp: In function 'void solve_tree(bool)':
pipes.cpp:90:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(deg[it.first] + 1 == g[it.first].size()) {
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
pipes.cpp: In function 'void solve_cycle(bool)':
pipes.cpp:130:9: warning: 'nod' may be used uninitialized in this function [-Wmaybe-uninitialized]
dfs1(nod, nodes, 0, nod);
~~~~^~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1073 ms |
3192 KB |
Time limit exceeded |
2 |
Execution timed out |
1057 ms |
3316 KB |
Time limit exceeded |
3 |
Execution timed out |
1062 ms |
3384 KB |
Time limit exceeded |
4 |
Execution timed out |
1059 ms |
9544 KB |
Time limit exceeded |
5 |
Execution timed out |
1069 ms |
9544 KB |
Time limit exceeded |
6 |
Execution timed out |
1084 ms |
9544 KB |
Time limit exceeded |
7 |
Execution timed out |
1087 ms |
9544 KB |
Time limit exceeded |
8 |
Execution timed out |
1072 ms |
9544 KB |
Time limit exceeded |
9 |
Execution timed out |
1082 ms |
9544 KB |
Time limit exceeded |
10 |
Execution timed out |
1066 ms |
9544 KB |
Time limit exceeded |
11 |
Execution timed out |
1082 ms |
9544 KB |
Time limit exceeded |
12 |
Execution timed out |
1083 ms |
9544 KB |
Time limit exceeded |
13 |
Execution timed out |
1089 ms |
9544 KB |
Time limit exceeded |
14 |
Execution timed out |
1086 ms |
9544 KB |
Time limit exceeded |
15 |
Execution timed out |
1085 ms |
9824 KB |
Time limit exceeded |
16 |
Execution timed out |
1088 ms |
9824 KB |
Time limit exceeded |
17 |
Execution timed out |
1084 ms |
9824 KB |
Time limit exceeded |
18 |
Execution timed out |
1086 ms |
9824 KB |
Time limit exceeded |
19 |
Execution timed out |
1077 ms |
11232 KB |
Time limit exceeded |
20 |
Execution timed out |
1090 ms |
11232 KB |
Time limit exceeded |
21 |
Execution timed out |
1079 ms |
11232 KB |
Time limit exceeded |
22 |
Execution timed out |
1085 ms |
11232 KB |
Time limit exceeded |
23 |
Execution timed out |
1094 ms |
11232 KB |
Time limit exceeded |
24 |
Execution timed out |
1091 ms |
11232 KB |
Time limit exceeded |
25 |
Execution timed out |
1089 ms |
11232 KB |
Time limit exceeded |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
11232 KB |
Output is correct |
2 |
Correct |
5 ms |
11232 KB |
Output is correct |
3 |
Correct |
68 ms |
11232 KB |
Output is correct |
4 |
Correct |
83 ms |
11408 KB |
Output is correct |
5 |
Correct |
75 ms |
11408 KB |
Output is correct |
6 |
Correct |
282 ms |
22396 KB |
Output is correct |
7 |
Correct |
4 ms |
22396 KB |
Output is correct |
8 |
Correct |
4 ms |
22396 KB |
Output is correct |
9 |
Correct |
4 ms |
22396 KB |
Output is correct |
10 |
Correct |
4 ms |
22396 KB |
Output is correct |
11 |
Correct |
5 ms |
22396 KB |
Output is correct |
12 |
Correct |
4 ms |
22396 KB |
Output is correct |
13 |
Correct |
4 ms |
22396 KB |
Output is correct |
14 |
Correct |
5 ms |
22396 KB |
Output is correct |
15 |
Correct |
5 ms |
22396 KB |
Output is correct |
16 |
Correct |
9 ms |
22396 KB |
Output is correct |
17 |
Correct |
5 ms |
22396 KB |
Output is correct |
18 |
Correct |
5 ms |
22396 KB |
Output is correct |
19 |
Correct |
5 ms |
22396 KB |
Output is correct |
20 |
Correct |
5 ms |
22396 KB |
Output is correct |
21 |
Correct |
6 ms |
22396 KB |
Output is correct |
22 |
Correct |
5 ms |
22396 KB |
Output is correct |
23 |
Correct |
86 ms |
22396 KB |
Output is correct |
24 |
Correct |
122 ms |
22396 KB |
Output is correct |
25 |
Correct |
80 ms |
22396 KB |
Output is correct |
26 |
Correct |
89 ms |
22396 KB |
Output is correct |
27 |
Correct |
90 ms |
22396 KB |
Output is correct |
28 |
Correct |
95 ms |
22396 KB |
Output is correct |
29 |
Correct |
242 ms |
22396 KB |
Output is correct |
30 |
Correct |
136 ms |
22396 KB |
Output is correct |
31 |
Correct |
115 ms |
22396 KB |
Output is correct |
32 |
Correct |
95 ms |
22396 KB |
Output is correct |
33 |
Correct |
74 ms |
22396 KB |
Output is correct |
34 |
Correct |
80 ms |
22396 KB |
Output is correct |
35 |
Correct |
92 ms |
22396 KB |
Output is correct |
36 |
Correct |
80 ms |
22396 KB |
Output is correct |
37 |
Correct |
302 ms |
22444 KB |
Output is correct |
38 |
Correct |
107 ms |
22444 KB |
Output is correct |
39 |
Correct |
96 ms |
22444 KB |
Output is correct |
40 |
Correct |
101 ms |
22444 KB |
Output is correct |
41 |
Correct |
72 ms |
22444 KB |
Output is correct |
42 |
Correct |
79 ms |
22444 KB |
Output is correct |
43 |
Correct |
70 ms |
22444 KB |
Output is correct |
44 |
Correct |
76 ms |
22444 KB |
Output is correct |
45 |
Correct |
212 ms |
22444 KB |
Output is correct |
46 |
Correct |
100 ms |
22444 KB |
Output is correct |
47 |
Correct |
102 ms |
22444 KB |
Output is correct |
48 |
Correct |
104 ms |
22444 KB |
Output is correct |
49 |
Correct |
59 ms |
22444 KB |
Output is correct |
50 |
Correct |
73 ms |
22444 KB |
Output is correct |
51 |
Correct |
72 ms |
22444 KB |
Output is correct |
52 |
Correct |
74 ms |
22444 KB |
Output is correct |
53 |
Correct |
213 ms |
22444 KB |
Output is correct |
54 |
Correct |
126 ms |
22444 KB |
Output is correct |