답안 #555886

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
555886 2022-05-01T18:38:33 Z blue Pipes (BOI13_pipes) C++17
67.5926 / 100
1000 ms 11648 KB
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;
using vpii = vector<pii>;
using vll = vector<ll>;
#define sz(x) int(x.size())

const int mx = 100'000;

int N, M;
vpii edge[1+mx];
vll c(1+mx);


vll x(1+mx);

void dfs(int u, int p)
{
	for(pii vp : edge[u])
	{
		int v = vp.first;
		int e = vp.second;

		if(v == p) continue;
		dfs(v, u);

		x[e] = 2*c[v];

		c[u] -= c[v];
		c[v] = 0;
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int N, M;
	cin >> N >> M;

	if(M > N)
	{
		cout << "0\n";
		return 0;
	}

	for(int i = 1; i <= N; i++) cin >> c[i];

	for(int j = 1; j <= M; j++)
	{
		int u, v;
		cin >> u >> v;
		edge[u].push_back({v, j});
		edge[v].push_back({u, j});
	}

	if(M == N-1)
	{
		dfs(1, 0);
	}
	else
	{
		queue<int> tbv;
		vi visit(1+N, 0);

		vi deg(1+N);
		for(int i = 1; i <= N; i++)
		{
			deg[i] = sz(edge[i]);
			if(deg[i] == 1)
			{
				tbv.push(i);
				visit[i] = 1;
			}
		}

		// cerr << "A\n";


		while(!tbv.empty())
		{
			int u = tbv.front();
			tbv.pop();

			for(auto vp : edge[u])
			{
				int v = vp.first;
				int e = vp.second;

				if(visit[v]) continue;

				deg[v]--;

				x[e] = 2*c[v];
				c[v] -= c[u];
				c[u] = 0;

				if(!deg[v])
				{
					tbv.push(v);
					visit[v] = 1;
				}
			}
		}

		// cerr << "B\n";

		int U = 1;
		while(visit[U])
			U++;

		int viscount = 0;
		for(int u = 1; u <= N; u++)
			viscount += visit[u];

		vi edgevis(1+N, 0);

		// cerr << "C\n";


		vi nodes, edges;
		for(int z = 1; z <= N - viscount; z++)
		{
			for(auto vp : edge[U])
			{
				int v = vp.first;
				int e = vp.second;

				if(visit[v]) continue;
				if(edgevis[e]) continue;

				edgevis[e] = 1;


				nodes.push_back(U);
				edges.push_back(e);

				U = v;

				break;
			}
		}
		// cerr << "D\n";

		int Z = N - viscount;

		// cerr << "Z = " << Z << '\n';

		// for(int z = 0; z < Z; z++) cerr << nodes[z] << ' ' << edges[z] << '\n';

		if(Z % 2 == 0)
		{
			cout << "0\n";
			return 0;
		}

		vll a(Z), b(Z);
		a[0] = 1;
		b[0] = 0;



		for(int i = 1; i < Z; i++)
		{
			if(!(1 <= nodes[i] && nodes[i] <= N)) while(1);
			a[i] = -a[i-1];
			b[i] = c[nodes[i]] - b[i-1]; 
		}

		return 0;

		//(a.back() + a[0]) * x  +  (b.back() + b[0]) == c[nodes[0]]
		//x = (c[nodes[0]] - (b.back() + b[0])) / (a.back() + a[0])

		if(a.back() + a[0] == 0) while(1);

		for(int i = 0; i < Z; i++)
		{
			x[edges[i]] = 2*((a[i] * (c[nodes[0]] - (b.back() + b[0]))) / (a.back() + a[0]) + b[i]);

			// cerr << i << " : " << nodes[i] << " : " << a[i] << ' ' << b[i] << "\n";
		}
	}

	for(int e = 1; e <= M; e++) 
		cout << x[e] << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4180 KB Output is correct
2 Correct 2 ms 4180 KB Output is correct
3 Correct 3 ms 4180 KB Output is correct
4 Correct 49 ms 8380 KB Output is correct
5 Correct 2 ms 4180 KB Output is correct
6 Correct 2 ms 4180 KB Output is correct
7 Correct 3 ms 4180 KB Output is correct
8 Correct 3 ms 4180 KB Output is correct
9 Correct 3 ms 4180 KB Output is correct
10 Correct 3 ms 4180 KB Output is correct
11 Correct 2 ms 4180 KB Output is correct
12 Correct 2 ms 4308 KB Output is correct
13 Correct 41 ms 7452 KB Output is correct
14 Correct 45 ms 8128 KB Output is correct
15 Correct 48 ms 8400 KB Output is correct
16 Correct 46 ms 7688 KB Output is correct
17 Correct 55 ms 8348 KB Output is correct
18 Correct 49 ms 8340 KB Output is correct
19 Correct 54 ms 11648 KB Output is correct
20 Correct 2 ms 4180 KB Output is correct
21 Correct 3 ms 4196 KB Output is correct
22 Correct 50 ms 8360 KB Output is correct
23 Correct 36 ms 7516 KB Output is correct
24 Correct 59 ms 8408 KB Output is correct
25 Correct 46 ms 7596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 4180 KB Output isn't correct
2 Incorrect 2 ms 4180 KB Output isn't correct
3 Execution timed out 1089 ms 9764 KB Time limit exceeded
4 Correct 2 ms 4180 KB Output is correct
5 Correct 2 ms 4180 KB Output is correct
6 Correct 2 ms 4180 KB Output is correct
7 Incorrect 2 ms 4180 KB Output isn't correct
8 Incorrect 3 ms 4180 KB Output isn't correct
9 Execution timed out 1080 ms 4180 KB Time limit exceeded
10 Correct 2 ms 4180 KB Output is correct
11 Correct 2 ms 4180 KB Output is correct
12 Correct 2 ms 4180 KB Output is correct
13 Correct 2 ms 4180 KB Output is correct
14 Incorrect 3 ms 4176 KB Output isn't correct
15 Incorrect 3 ms 4180 KB Output isn't correct
16 Execution timed out 1085 ms 4180 KB Time limit exceeded
17 Correct 3 ms 4180 KB Output is correct
18 Correct 2 ms 4180 KB Output is correct
19 Correct 2 ms 4180 KB Output is correct
20 Correct 2 ms 4180 KB Output is correct
21 Correct 2 ms 4180 KB Output is correct
22 Incorrect 2 ms 4180 KB Output isn't correct
23 Execution timed out 1095 ms 9268 KB Time limit exceeded
24 Execution timed out 1086 ms 10284 KB Time limit exceeded
25 Execution timed out 1085 ms 9680 KB Time limit exceeded
26 Correct 2 ms 4180 KB Output is correct
27 Correct 2 ms 4180 KB Output is correct
28 Correct 2 ms 4180 KB Output is correct
29 Correct 2 ms 4180 KB Output is correct
30 Execution timed out 1086 ms 10436 KB Time limit exceeded
31 Execution timed out 1087 ms 10036 KB Time limit exceeded
32 Incorrect 43 ms 9172 KB Output isn't correct
33 Execution timed out 1084 ms 10484 KB Time limit exceeded
34 Correct 2 ms 4180 KB Output is correct
35 Correct 2 ms 4180 KB Output is correct
36 Correct 2 ms 4180 KB Output is correct
37 Correct 2 ms 4180 KB Output is correct
38 Execution timed out 1085 ms 10092 KB Time limit exceeded
39 Execution timed out 1087 ms 10052 KB Time limit exceeded
40 Execution timed out 1034 ms 10060 KB Time limit exceeded
41 Execution timed out 1085 ms 10060 KB Time limit exceeded
42 Correct 2 ms 4180 KB Output is correct
43 Correct 2 ms 4180 KB Output is correct
44 Correct 2 ms 4180 KB Output is correct
45 Correct 2 ms 4180 KB Output is correct
46 Incorrect 42 ms 8488 KB Output isn't correct
47 Incorrect 43 ms 9444 KB Output isn't correct
48 Incorrect 40 ms 8584 KB Output isn't correct
49 Correct 39 ms 8912 KB Output is correct
50 Correct 2 ms 4180 KB Output is correct
51 Correct 2 ms 4180 KB Output is correct
52 Correct 2 ms 4180 KB Output is correct
53 Correct 2 ms 4180 KB Output is correct
54 Execution timed out 1089 ms 10052 KB Time limit exceeded