Submission #120969

# Submission time Handle Problem Language Result Execution time Memory
120969 2019-06-25T20:26:21 Z thiago4532 Pipes (BOI13_pipes) C++17
65 / 100
417 ms 27824 KB
#include <bits/stdc++.h>
#define int int64_t

using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e5 + 10;
const int maxm = 5e5 + 10;
vector<int> grafo[maxn];
int n;
int s[maxn];
map<pair<int, int>, int> mapa;
int val[maxn], ans[maxn];
int grau[maxn];

namespace tree{

int nivel[maxn], pai[maxn], soma[maxn];
void dfs(int u, int p = 0) {
	pai[u] = p;

	for(auto v : grafo[u]) {
		if(v == p) continue;
		nivel[v] = nivel[u] + 1;
		dfs(v, u);
	}
}

};

vector<int> ordem;
namespace cycle {
int st;

void solve() {
	if(ordem.size() % 2 == 0){
		cout << "0\n";
		return;
	}

	int x = 0;
	int sig = 1;
	for(auto& u : ordem){
		x += s[u]*sig;
		sig *= -1;
	}
	x/=2;

	ans[mapa[{ordem[0], ordem.back()}]] = x;
	// cout << ordem[0] << " " << ordem.back() << ": " << ans[mapa[{ordem[0], ordem.back()}]] << "\n";
	for(int i = 0; i < (int)ordem.size() - 1; i++) {
		ans[mapa[{ordem[i], ordem[i+1]}]] = s[ordem[i]] - x;
		// cout << ordem[i] << " " << ordem[i+1] << ": " << s[ordem[i]] - x << "\n";
		x = s[ordem[i]] - x;
	}

	for(int i=1;i<=n;i++){
		cout << ans[i] << "\n";
	}
}

};

bool mark[maxn], mark2[maxn];

int dfs(int u, int l = 0) {
	mark[u] = true;
	mark2[u] = true;

	for(auto v : grafo[u]){
		if(mark2[v] && v != l) {
			mark2[u] = false;
			ordem.push_back(u);
			return v;
		}else if(mark[v]) continue;

		int x = dfs(v, u);
		if(x != 0){
			mark2[u] = false;
			ordem.push_back(u);
			return (u == x ? 0 : x);
		}
	}

	mark2[u] = false;
	return 0;
}

bool test[maxn];
int ciclo[maxn];

void dfs2(int u) {
	test[u] = true;
	for(auto v : grafo[u]) {
		if(test[v] || ciclo[v]) continue;
	
		dfs2(v);
		s[u] -= s[v];
	}
	for(auto v : grafo[u])
		if(ciclo[v]) s[v] -= s[u];
}

int32_t main() {
	int m;

	cin >> n >> m;
	if(m > n) {
		cout << "0\n";
		return 0;
	}
	int total = 0;
	for(int i=1;i<=n;i++)
		cin >> s[i], s[i] *= 2, total += s[i];

	for(int i=1;i<=m;i++) {
		int a, b;
		cin >> a >> b;
		grafo[a].push_back(b);
		grafo[b].push_back(a);
		mapa[{a, b}] = i;
		mapa[{b, a}] = i;

		grau[a]++;
		grau[b]++;
	}
	if(n - 1 == m) {
		tree::dfs(1);
		vector<pii> arr;
		for(int i=1;i<=n;i++)
			arr.push_back({tree::nivel[i], i});
		sort(arr.begin(), arr.end(), greater<pii>());

		for(auto e : arr) {
			int v = e.second;
			int u = tree::pai[v];

			tree::soma[u] += (s[v] - tree::soma[v]);
			ans[mapa[{u, v}]] = (s[v] - tree::soma[v]);
		}

		if(tree::soma[1] != s[1]){
			cout << "0\n";
			return 0;
		}

		for(int i=1;i<=m;i++)
			cout << ans[i] << "\n";

	}else { // n == m
		dfs(1);
		for(auto& u : ordem){
			cout << u << "\n";
		}
		for(auto& o : ordem)
			ciclo[o] = true;

		for(int u=1;u<=n;u++) {
			if(ciclo[u] || test[u]) continue;
			dfs2(u);
		}
		cycle::st = ordem[0];

		cycle::solve();
	}
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 2892 KB Output is correct
2 Correct 4 ms 2688 KB Output is correct
3 Correct 5 ms 2944 KB Output is correct
4 Correct 343 ms 25700 KB Output is correct
5 Correct 4 ms 2816 KB Output is correct
6 Correct 4 ms 2816 KB Output is correct
7 Correct 4 ms 2688 KB Output is correct
8 Correct 4 ms 2688 KB Output is correct
9 Correct 5 ms 2944 KB Output is correct
10 Correct 5 ms 2944 KB Output is correct
11 Correct 5 ms 2944 KB Output is correct
12 Correct 5 ms 2944 KB Output is correct
13 Correct 286 ms 21096 KB Output is correct
14 Correct 335 ms 24420 KB Output is correct
15 Correct 358 ms 25928 KB Output is correct
16 Correct 297 ms 22372 KB Output is correct
17 Correct 372 ms 25732 KB Output is correct
18 Correct 348 ms 25828 KB Output is correct
19 Correct 394 ms 27620 KB Output is correct
20 Correct 4 ms 2688 KB Output is correct
21 Correct 6 ms 2944 KB Output is correct
22 Correct 375 ms 25832 KB Output is correct
23 Correct 280 ms 21092 KB Output is correct
24 Correct 364 ms 25800 KB Output is correct
25 Correct 288 ms 21992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 2688 KB Output isn't correct
2 Incorrect 5 ms 2944 KB Output isn't correct
3 Incorrect 265 ms 23052 KB Output isn't correct
4 Correct 4 ms 2688 KB Output is correct
5 Correct 4 ms 2688 KB Output is correct
6 Correct 4 ms 2688 KB Output is correct
7 Incorrect 4 ms 2560 KB Output isn't correct
8 Incorrect 4 ms 2816 KB Output isn't correct
9 Incorrect 4 ms 2688 KB Output isn't correct
10 Correct 4 ms 2688 KB Output is correct
11 Correct 4 ms 2688 KB Output is correct
12 Correct 4 ms 2688 KB Output is correct
13 Correct 4 ms 2688 KB Output is correct
14 Incorrect 4 ms 2816 KB Output isn't correct
15 Incorrect 5 ms 2916 KB Output isn't correct
16 Incorrect 5 ms 2944 KB Output isn't correct
17 Incorrect 5 ms 2944 KB Output isn't correct
18 Correct 4 ms 2688 KB Output is correct
19 Correct 4 ms 2688 KB Output is correct
20 Correct 3 ms 2688 KB Output is correct
21 Correct 4 ms 2688 KB Output is correct
22 Incorrect 5 ms 2944 KB Output isn't correct
23 Incorrect 244 ms 22132 KB Output isn't correct
24 Incorrect 316 ms 25844 KB Output isn't correct
25 Incorrect 255 ms 23152 KB Output isn't correct
26 Correct 4 ms 2688 KB Output is correct
27 Correct 4 ms 2688 KB Output is correct
28 Correct 4 ms 2688 KB Output is correct
29 Correct 4 ms 2688 KB Output is correct
30 Incorrect 340 ms 26624 KB Output isn't correct
31 Incorrect 417 ms 27824 KB Output isn't correct
32 Incorrect 332 ms 23888 KB Output isn't correct
33 Incorrect 293 ms 24692 KB Output isn't correct
34 Correct 4 ms 2688 KB Output is correct
35 Correct 3 ms 2688 KB Output is correct
36 Correct 4 ms 2688 KB Output is correct
37 Correct 3 ms 2688 KB Output is correct
38 Incorrect 305 ms 25236 KB Output isn't correct
39 Incorrect 298 ms 23156 KB Output isn't correct
40 Incorrect 323 ms 25460 KB Output isn't correct
41 Incorrect 285 ms 26704 KB Output isn't correct
42 Correct 4 ms 2688 KB Output is correct
43 Correct 4 ms 2688 KB Output is correct
44 Correct 4 ms 2688 KB Output is correct
45 Correct 3 ms 2688 KB Output is correct
46 Incorrect 313 ms 27344 KB Output isn't correct
47 Incorrect 330 ms 25544 KB Output isn't correct
48 Incorrect 341 ms 27624 KB Output isn't correct
49 Incorrect 264 ms 21592 KB Output isn't correct
50 Correct 5 ms 2688 KB Output is correct
51 Correct 4 ms 2688 KB Output is correct
52 Correct 3 ms 2688 KB Output is correct
53 Correct 3 ms 2688 KB Output is correct
54 Incorrect 338 ms 25840 KB Output isn't correct