Submission #1230877

#TimeUsernameProblemLanguageResultExecution timeMemory
1230877gelastropodPovjerenstvo (COI22_povjerenstvo)C++20
13 / 100
464 ms65616 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main() {
	int N, M, a, b, numans = 0;
	cin >> N >> M;
	vector<vector<int>> adjlist(N, vector<int>());
	vector<vector<int>> revadjlist(N, vector<int>());
	vector<pair<int, int>> edges;
	vector<int> outdeg(N, 0);
	for (int i = 0; i < M; i++) {
		cin >> a >> b;
		a--, b--;
		adjlist[a].push_back(b);
		revadjlist[b].push_back(a);
		edges.push_back({ a, b });
		outdeg[a]++;
	}
	vector<bool> inans(N, false);
	queue<int> proc;
	vector<bool> visited(N, false);
	for (int i = 0; i < N; i++) {
		if (outdeg[i] == 0) {
			proc.push(i);
			visited[i] = true;
		}
	}
	bool die = false;
	while (!proc.empty() && !die) {
		int i = proc.front();
		proc.pop();
		inans[i] = true;
		numans++;
		for (int j : revadjlist[i]) {
			if (inans[j]) {
				die = true;
				break;
			}
			if (visited[j]) continue;
			visited[j] = true;
			for (int k : adjlist[j]) {
				if (visited[k]) continue;
				if (outdeg[k] == 0) {
					proc.push(k);
					visited[k] = true;
				}
			}
			for (int k : revadjlist[j]) {
				if (visited[k]) continue;
				outdeg[k]--;
				if (outdeg[k] == 0) {
					proc.push(k);
					visited[k] = true;
				}
			}
		}
		for (int j : adjlist[i]) {
			if (inans[j]) {
				die = true;
				break;
			}
		}
	}
	if (die) {
		cout << "-1\n";
		return 0;
	}
	cout << numans << '\n';
	for (int i = 0; i < N; i++) {
		if (inans[i]) cout << i + 1 << ' ';
	}
	cout << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...