164352025-04-30 09:41:58GervidPletykacpp17Hibás válasz 80/100105ms8748 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <limits.h>
#include <algorithm>
#include <math.h>
#include <array>
#include <fstream>

using namespace std;

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

	//fstream cin("be2.txt");

	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();
			}
			odd -= isolated;
			isolated = 0;
			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[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] << ' ';
}

RészfeladatÖsszpontTesztVerdiktIdőMemória
base80/100
1Elfogadva0/01ms316 KiB
2Hibás válasz0/017ms2120 KiB
3Elfogadva2/21ms320 KiB
4Részben helyes1/21ms316 KiB
5Részben helyes1/22ms316 KiB
6Részben helyes1/23ms564 KiB
7Elfogadva4/43ms832 KiB
8Részben helyes2/44ms1076 KiB
9Elfogadva4/44ms820 KiB
10Elfogadva4/44ms1004 KiB
11Részben helyes2/417ms2344 KiB
12Elfogadva4/416ms2184 KiB
13Részben helyes2/425ms3348 KiB
14Részben helyes2/427ms3520 KiB
15Részben helyes3/641ms4876 KiB
16Elfogadva6/643ms4660 KiB
17Részben helyes3/654ms6016 KiB
18Elfogadva6/659ms5968 KiB
19Elfogadva6/661ms6344 KiB
20Részben helyes3/663ms6460 KiB
21Elfogadva6/659ms6452 KiB
22Elfogadva6/668ms6740 KiB
23Elfogadva6/6105ms8748 KiB
24Elfogadva6/696ms8740 KiB