#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;
}
}
while (!proc.empty()) {
int i = proc.front();
proc.pop();
inans[i] = true;
numans++;
for (int j : revadjlist[i]) {
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 (auto& i : edges) {
if (inans[i.first] && inans[i.second]) {
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |