제출 #1230819

#제출 시각아이디문제언어결과실행 시간메모리
1230819gelastropodPovjerenstvo (COI22_povjerenstvo)C++20
13 / 100
368 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; } } 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...