Submission #443996

# Submission time Handle Problem Language Result Execution time Memory
443996 2021-07-12T20:10:00 Z aryan12 Pipes (BOI13_pipes) C++17
74.0741 / 100
227 ms 29440 KB
#include <bits/stdc++.h>
using namespace std;
#define int long long

mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count());

const int N = 1e5 + 5;
int change[N], result[N];
vector<pair<int, int> > g[N];
int edgeChange[N], temp[N];
bool vis[N];
int n, m, bruh;
vector<int> cycle, cycle_edges;

void dfs(int node, int par, int edgeNum) {
	for(int i = 0; i < g[node].size(); i++) {
		if(g[node][i].first != par) {
			dfs(g[node][i].first, node, g[node][i].second);
		}
	}
	int netWithParent = change[node] - result[node];
	if(par != -1) {
		result[node] += netWithParent;
		edgeChange[edgeNum] = netWithParent;
		result[par] += netWithParent;
	}
}

void Tree() {
	dfs(1, -1, -1);
	if(result[1] != change[1]) {
		cout << "0\n";
		return;
	}
	for(int i = 1; i <= m; i++) {
		cout << edgeChange[i] * 2 << "\n";
	}
}

void dfs1(int node, int par) {
	vis[node] = true;
	cycle.push_back(node);
	for(int i = 0; i < g[node].size(); i++) {
		if(g[node][i].first == par) {
			continue;
		}
		if(!vis[g[node][i].first]) {
			cycle_edges.push_back(g[node][i].second);
			dfs1(g[node][i].first, node);
		}
		if(g[node][i].first == bruh) {
			cycle_edges.push_back(g[node][i].second);
		}
	}
}

void Solve() {
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		cin >> change[i];
	}
	for(int i = 1; i <= m; i++) {
		int u, v;
		cin >> u >> v;
		g[u].push_back(make_pair(v, i));
		g[v].push_back(make_pair(u, i));
	}
	if(m == n - 1) {
		Tree();
		return;
	}
	if(m > n) {
		cout << "0\n";
		return;
	}
	int cnt = 0;
	queue<int> q;
	for(int i = 1; i <= n; i++) {
		vis[i] = false;
		temp[i] = g[i].size();
		if(temp[i] == 1) {
			q.push(i);
		}
	}
	while(!q.empty()) {
		int node = q.front();
		vis[node] = true;
		q.pop();
		cnt++;
		for(int i = 0; i < g[node].size(); i++) {
			if(!vis[g[node][i].first]) {
				temp[g[node][i].first]--;
				if(temp[g[node][i].first] == 1) {
					q.push(g[node][i].first);
				}
				int netChange = change[node] - result[node];
				edgeChange[g[node][i].second] = netChange;
				result[node] += netChange;
				result[g[node][i].first] += netChange;
			}
		}
	}
	if((n - cnt) % 2 == 0) {
		cout << "0\n";
		return;
	}
	for(int i = 1; i <= n; i++) {
		if(!vis[i]) {
			bruh = i;
			dfs1(i, -1);
		}
	}
	/*for(int i = 1; i <= n; i++) {
		cout << "change[i] = " << change[i] << ", result[i] = " << result[i] << "\n";
	}*/
	int sum = 0;
	for(int i = 0; i < cycle.size(); i++) {
		if(i % 2 == 0) {
			sum += (change[cycle[i]] - result[cycle[i]]);
		}
		else {
			sum -= (change[cycle[i]] - result[cycle[i]]);
		}
	}
	if(sum % 2 == 1) {
		cout << "0\n";
		return;
	}
	edgeChange[cycle_edges[0]] = sum / 2;
	/*for(int i = 0; i < cycle_edges.size(); i++) {
		cout << cycle_edges[i] << " ";
	}
	cout << "\n";
	for(int i = 0; i < cycle.size(); i++) {
		cout << cycle[i] << " ";
	}
	cout << "\n";*/
	for(int i = 1; i < cycle_edges.size(); i++) {
		edgeChange[cycle_edges[i]] = change[cycle[i]] - result[cycle[i]] - edgeChange[cycle_edges[i - 1]];
	}
	for(int i = 1; i <= m; i++) {
		cout << edgeChange[i] * 2 << "\n";
	}
}

int32_t main() {
	auto begin = std::chrono::high_resolution_clock::now();
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t = 1;
	//cin >> t;
	while(t--) {
		Solve();
	}
	auto end = std::chrono::high_resolution_clock::now();
    auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
    cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n"; 
	return 0;
}

Compilation message

pipes.cpp: In function 'void dfs(long long int, long long int, long long int)':
pipes.cpp:16:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |  for(int i = 0; i < g[node].size(); i++) {
      |                 ~~^~~~~~~~~~~~~~~~
pipes.cpp: In function 'void dfs1(long long int, long long int)':
pipes.cpp:43:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |  for(int i = 0; i < g[node].size(); i++) {
      |                 ~~^~~~~~~~~~~~~~~~
pipes.cpp: In function 'void Solve()':
pipes.cpp:90:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |   for(int i = 0; i < g[node].size(); i++) {
      |                  ~~^~~~~~~~~~~~~~~~
pipes.cpp:117:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  117 |  for(int i = 0; i < cycle.size(); i++) {
      |                 ~~^~~~~~~~~~~~~~
pipes.cpp:138:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  138 |  for(int i = 1; i < cycle_edges.size(); i++) {
      |                 ~~^~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2764 KB Output is correct
4 Correct 83 ms 10456 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 2 ms 2636 KB Output is correct
7 Correct 2 ms 2636 KB Output is correct
8 Correct 2 ms 2636 KB Output is correct
9 Correct 2 ms 2764 KB Output is correct
10 Correct 2 ms 2764 KB Output is correct
11 Correct 2 ms 2764 KB Output is correct
12 Correct 2 ms 2764 KB Output is correct
13 Correct 58 ms 8964 KB Output is correct
14 Correct 73 ms 10036 KB Output is correct
15 Correct 73 ms 10580 KB Output is correct
16 Correct 59 ms 9288 KB Output is correct
17 Correct 70 ms 10468 KB Output is correct
18 Correct 68 ms 10532 KB Output is correct
19 Correct 76 ms 13640 KB Output is correct
20 Correct 2 ms 2636 KB Output is correct
21 Correct 2 ms 2764 KB Output is correct
22 Correct 73 ms 10492 KB Output is correct
23 Correct 57 ms 8824 KB Output is correct
24 Correct 70 ms 10564 KB Output is correct
25 Correct 57 ms 9268 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 2636 KB Output isn't correct
2 Incorrect 2 ms 2764 KB Output isn't correct
3 Correct 55 ms 10752 KB Output is correct
4 Correct 49 ms 8552 KB Output is correct
5 Correct 50 ms 8392 KB Output is correct
6 Correct 217 ms 29440 KB Output is correct
7 Incorrect 2 ms 2636 KB Output isn't correct
8 Incorrect 2 ms 2636 KB Output isn't correct
9 Correct 2 ms 2636 KB Output is correct
10 Correct 2 ms 2636 KB Output is correct
11 Correct 2 ms 2636 KB Output is correct
12 Correct 2 ms 2636 KB Output is correct
13 Correct 2 ms 2636 KB Output is correct
14 Incorrect 2 ms 2636 KB Output isn't correct
15 Incorrect 3 ms 2764 KB Output isn't correct
16 Incorrect 2 ms 2772 KB Output isn't correct
17 Correct 2 ms 2764 KB Output is correct
18 Correct 2 ms 2636 KB Output is correct
19 Correct 2 ms 2636 KB Output is correct
20 Correct 2 ms 2636 KB Output is correct
21 Correct 3 ms 2764 KB Output is correct
22 Incorrect 2 ms 2764 KB Output isn't correct
23 Incorrect 63 ms 14976 KB Output isn't correct
24 Incorrect 88 ms 16756 KB Output isn't correct
25 Correct 57 ms 10824 KB Output is correct
26 Correct 48 ms 8636 KB Output is correct
27 Correct 48 ms 8516 KB Output is correct
28 Correct 52 ms 8936 KB Output is correct
29 Correct 195 ms 24056 KB Output is correct
30 Incorrect 79 ms 15672 KB Output isn't correct
31 Incorrect 87 ms 19876 KB Output isn't correct
32 Incorrect 76 ms 13296 KB Output isn't correct
33 Correct 56 ms 11184 KB Output is correct
34 Correct 48 ms 8596 KB Output is correct
35 Correct 48 ms 8656 KB Output is correct
36 Correct 48 ms 8652 KB Output is correct
37 Correct 227 ms 29380 KB Output is correct
38 Incorrect 87 ms 16148 KB Output isn't correct
39 Incorrect 75 ms 12752 KB Output isn't correct
40 Incorrect 81 ms 16452 KB Output isn't correct
41 Correct 54 ms 11072 KB Output is correct
42 Correct 50 ms 8488 KB Output is correct
43 Correct 53 ms 8560 KB Output is correct
44 Correct 50 ms 8428 KB Output is correct
45 Correct 164 ms 26744 KB Output is correct
46 Incorrect 83 ms 15544 KB Output isn't correct
47 Incorrect 81 ms 16388 KB Output isn't correct
48 Incorrect 85 ms 19580 KB Output isn't correct
49 Correct 61 ms 10948 KB Output is correct
50 Correct 51 ms 8644 KB Output is correct
51 Correct 47 ms 8528 KB Output is correct
52 Correct 48 ms 8448 KB Output is correct
53 Correct 179 ms 26016 KB Output is correct
54 Incorrect 78 ms 15100 KB Output isn't correct