163092025-04-28 10:15:11GervidPletykacpp17Wrong answer 51/100200ms17428 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <limits.h>
#include <algorithm>
#include <math.h>
#include <array>

using namespace std;

int main()
{
	iostream::sync_with_stdio(0);
	cin.tie(0);

	int n, m, k, i;
	cin >> n >> m >> k;

	vector<int> state(n, 0);
	queue<int> q;
	for (i = 0; i < k; i++)
	{
		int knows;
		cin >> knows;
		q.push(--knows);
		state[knows] = 1;
	}
	q.push(-1);
	vector<vector<int>> g(n);
	for (i = 0; i < m; i++)
	{
		int a, b;
		cin >> a >> b;
		g[--a].push_back(--b);
		g[b].push_back(a);
	}

	vector<int> days;
	vector<array<int, 2>> update;
	days.reserve(2 * n + 1), update.reserve(n);
	int odd = k, even = 0; //first day is odd, but zero indexed

	while (true)
	{
		int node = q.front();
		q.pop();
		if (node < 0)
		{
			while (!update.empty())
			{
				if ((state[update.back()[0]] & 1) ^ (update.back()[1] & 1)) odd++;
				if ((state[update.back()[0]] & 2) ^ (update.back()[1] & 2)) even++;
				state[update.back()[0]] = update.back()[1];
				update.pop_back();
			}
			days.push_back((node == -1) ? odd : even);
			if (q.empty()) break;
			q.push((node == -1) ? -2 : -1);
			continue;
		}
		for (int neighbour : g[node])
		{
			if (state[neighbour] != 3 && (state[node] == 3 || (state[node] ^ 3) != state[neighbour]))
			{
				update.push_back({ neighbour, state[neighbour] | ((((state[neighbour] & 1) == 0) && (state[node] & 2)) | ((static_cast<int>(((state[neighbour] & 2) == 0) && (state[node] & 1)) << 1))) });
				q.push(neighbour);
			}
		}
	}
	int maxv = -1;
	for (i = days.size() - 1; i >= 0; i--)
	{
		if (days[i] >= maxv)
		{
			maxv = days[i];
			days.resize(i + 1);
		}
	}
	cout << days.back() << '\n' << days.size() << '\n';
	for (i = 0; i < days.size(); i++)
	{
		cout << days[i] << ' ';
	}
}
//5 4 2
//1 2
//1 2
//2 3
//3 4
//4 5

SubtaskSumTestVerdictTimeMemory
base51/100
1Accepted0/01ms316 KiB
2Wrong answer0/018ms2508 KiB
3Accepted2/21ms316 KiB
4Partially correct1/22ms316 KiB
5Wrong answer0/22ms564 KiB
6Wrong answer0/23ms564 KiB
7Accepted4/43ms564 KiB
8Wrong answer0/46ms1076 KiB
9Accepted4/44ms1096 KiB
10Accepted4/44ms1092 KiB
11Wrong answer0/417ms2444 KiB
12Accepted4/417ms2452 KiB
13Partially correct2/428ms4060 KiB
14Wrong answer0/427ms4148 KiB
15Wrong answer0/646ms5560 KiB
16Accepted6/639ms5684 KiB
17Wrong answer0/652ms6964 KiB
18Accepted6/667ms7064 KiB
19Accepted6/656ms7488 KiB
20Wrong answer0/679ms7628 KiB
21Accepted6/657ms7628 KiB
22Accepted6/663ms7740 KiB
23Time limit exceeded0/6200ms17428 KiB
24Time limit exceeded0/6170ms17412 KiB