164362025-04-30 09:47:29GervidPletykacpp17Accepted 100/10098ms8756 KiB
#include <iostream>
#include <vector>
#include <queue>
#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), queries(k);
	queue<int> q;
	for (i = 0; i < k; i++)
	{
		cin >> queries[i];
		q.push(--queries[i]);
		state[queries[i]] = 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 + 2), update.reserve(n);
	int odd = k, even = 0, isolated = 0; //first day is odd, but zero indexed
	for (i = 0; i < k; i++)
	{
		if (g[queries[i]].size() == 0) isolated++;
	}

	while (true)
	{
		int node = q.front();
		q.pop();
		if (node < 0)
		{
			while (!update.empty())
			{
				if ((state[update.back()[0]] & update.back()[1]) == 0)
				{
					if (update.back()[1] == 1) odd++;
					if (update.back()[1] == 2) even++;
					state[update.back()[0]] |= update.back()[1];
					q.push(update.back()[0]);
				}
				update.pop_back();
			}
			days.push_back((node == -1) ? odd : even);
			if (q.empty()) break;
			q.push((node == -1) ? -2 : -1);

			odd -= isolated;
			isolated = 0;
			continue;
		}
		for (int neighbour : g[node])
		{
			if ((state[node] & 1) > 0 && (state[neighbour] & 2) == 0) update.push_back({ neighbour, 2 });
			if ((state[node] & 2) > 0 && (state[neighbour] & 1) == 0) update.push_back({ neighbour, 1 });
		}
	}

	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] << ' ';
}
//3 0 1
//1
SubtaskSumTestVerdictTimeMemory
base100/100
1Accepted0/01ms508 KiB
2Accepted0/017ms2276 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/22ms388 KiB
6Accepted2/23ms564 KiB
7Accepted4/43ms632 KiB
8Accepted4/44ms1076 KiB
9Accepted4/44ms912 KiB
10Accepted4/44ms1024 KiB
11Accepted4/417ms2312 KiB
12Accepted4/416ms2100 KiB
13Accepted4/423ms3372 KiB
14Accepted4/426ms3376 KiB
15Accepted6/637ms4816 KiB
16Accepted6/639ms4660 KiB
17Accepted6/646ms6028 KiB
18Accepted6/654ms5952 KiB
19Accepted6/650ms6520 KiB
20Accepted6/659ms6560 KiB
21Accepted6/657ms6332 KiB
22Accepted6/657ms6624 KiB
23Accepted6/697ms8744 KiB
24Accepted6/698ms8756 KiB