#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, m;
vector<int> link[500002], revLink[500002];
int ans[500002]; /// 0: ���� �� ��, 1: ��ĥ X, 2: ��ĥ O
vector<int> ansVec;
int sweeper = 1;
int deg[500002];
bool pushed[500002];
bool tryColor(int x){ /// x�� �� c�� ������ �������� ����
vector<int> nDeg (deg+1, deg+n+1);
vector<int> nAns (ans+1, ans+n+1);
vector<bool> nPushed (ans+1, ans+n+1);
queue<int> que;
que.push(x), nPushed[x] = 1;
while(!que.empty()){
int x = (int)que.front(); que.pop();
nAns[x] = 2;
for(int y: link[x]) if(nAns[y] == 2) nAns[x] = 1;
for(int y: revLink[x]) if(nAns[y] == 2) nAns[x] = 1;
if(nAns[x] == 2) for(auto y: link[x]) if(!nPushed[y]) nPushed[y] = 1, que.push(y);
for(auto y: revLink[x]){
nDeg[y]--;
if(!nDeg[y] && !nPushed[y]) que.push(y);
}
}
for(int i=1; i<=n; i++){
if(!nAns[i]) continue;
if(nAns[i] == 1){
bool exists = 0;
for(int y: link[x]) if(nAns[y] != 1) exists = 1;
if(!exists) return false;
}
if(nAns[i] == 2){
for(int y: link[x]) if(nAns[y] == 2) return false;
for(int y: revLink[x]) if(nAns[y] == 2) return false;
}
}
return true;
}
void color(int x, int c){
queue<int> que;
que.push(x), pushed[x] = 1;
while(!que.empty()){
int x = (int)que.front(); que.pop();
ans[x] = 2;
for(int y: link[x]) if(ans[y] == 2) ans[x] = 1;
for(int y: revLink[x]) if(ans[y] == 2) ans[x] = 1;
if(ans[x] == 2) for(auto y: link[x]) if(!pushed[y]) pushed[y] = 1, que.push(y);
for(auto y: revLink[x]){
deg[y]--;
if(!deg[y] && !pushed[y]) que.push(y);
}
}
}
int main(){
scanf("%d %d", &n, &m);
for(int i=1; i<=m; i++){
int x, y;
scanf("%d %d", &x, &y);
link[x].push_back(y);
revLink[y].push_back(x);
deg[x]++;
}
/// Algorithm
/// ���� Ȯ���� �ֵ��� ó���� �ش�
queue<int> que;
for(int i=1; i<=n; i++) if(!deg[i]) pushed[i] = 1, que.push(i);
while(!que.empty()){
int x = que.front(); que.pop();
int c = 2;
for(int y: link[x]) if(ans[y] == 2) c = 1;
for(int y: revLink[x]) if(ans[y] == 2) c = 1;
ans[x] = c;
if(ans[x] == 2) for(auto y: link[x]) if(!pushed[y]) pushed[y] = 1, que.push(y);
for(auto y: revLink[x]){
deg[y]--;
if(!deg[y] && !pushed[y]) que.push(y);
}
}
/// �������� ���� ��� deg > 0
for(int i=1; i<=n; i++){
if(ans[i]) continue;
if(tryColor(i)) color(i, 2);
else color(i, 1);
}
for(int i=1; i<=n; i++) if(ans[i] == 2) ansVec.push_back(i);
printf("%d\n", (int)ansVec.size());
for(auto x: ansVec) printf("%d ", x);
}
Compilation message
Main.cpp: In function 'int main()':
Main.cpp:67:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
67 | scanf("%d %d", &n, &m);
| ~~~~~^~~~~~~~~~~~~~~~~
Main.cpp:70:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
70 | scanf("%d %d", &x, &y);
| ~~~~~^~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
182 ms |
60524 KB |
Output is correct |
2 |
Correct |
197 ms |
60280 KB |
Output is correct |
3 |
Correct |
12 ms |
23780 KB |
Output is correct |
4 |
Correct |
60 ms |
33096 KB |
Output is correct |
5 |
Correct |
122 ms |
47384 KB |
Output is correct |
6 |
Correct |
172 ms |
50104 KB |
Output is correct |
7 |
Correct |
131 ms |
47032 KB |
Output is correct |
8 |
Correct |
171 ms |
50012 KB |
Output is correct |
9 |
Correct |
372 ms |
54644 KB |
Output is correct |
10 |
Correct |
326 ms |
52892 KB |
Output is correct |
11 |
Correct |
383 ms |
52300 KB |
Output is correct |
12 |
Correct |
448 ms |
47904 KB |
Output is correct |
13 |
Correct |
288 ms |
48508 KB |
Output is correct |
14 |
Correct |
254 ms |
48672 KB |
Output is correct |
15 |
Correct |
256 ms |
48584 KB |
Output is correct |
16 |
Correct |
246 ms |
48908 KB |
Output is correct |
17 |
Correct |
61 ms |
26700 KB |
Output is correct |
18 |
Correct |
98 ms |
29052 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
223 ms |
60568 KB |
Output is correct |
2 |
Correct |
168 ms |
50612 KB |
Output is correct |
3 |
Correct |
190 ms |
46016 KB |
Output is correct |
4 |
Correct |
467 ms |
51516 KB |
Output is correct |
5 |
Correct |
572 ms |
53224 KB |
Output is correct |
6 |
Correct |
459 ms |
52244 KB |
Output is correct |
7 |
Correct |
860 ms |
52128 KB |
Output is correct |
8 |
Execution timed out |
3006 ms |
51860 KB |
Time limit exceeded |
9 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
24220 KB |
Output is correct |
2 |
Correct |
14 ms |
24088 KB |
Output is correct |
3 |
Correct |
15 ms |
23928 KB |
Output is correct |
4 |
Correct |
18 ms |
24056 KB |
Output is correct |
5 |
Correct |
16 ms |
24020 KB |
Output is correct |
6 |
Correct |
16 ms |
24032 KB |
Output is correct |
7 |
Correct |
21 ms |
24008 KB |
Output is correct |
8 |
Correct |
25 ms |
24020 KB |
Output is correct |
9 |
Correct |
14 ms |
23800 KB |
Output is correct |
10 |
Correct |
12 ms |
23764 KB |
Output is correct |
11 |
Correct |
15 ms |
23860 KB |
Output is correct |
12 |
Runtime error |
34 ms |
48720 KB |
Execution killed with signal 11 |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
182 ms |
60524 KB |
Output is correct |
2 |
Correct |
197 ms |
60280 KB |
Output is correct |
3 |
Correct |
12 ms |
23780 KB |
Output is correct |
4 |
Correct |
60 ms |
33096 KB |
Output is correct |
5 |
Correct |
122 ms |
47384 KB |
Output is correct |
6 |
Correct |
172 ms |
50104 KB |
Output is correct |
7 |
Correct |
131 ms |
47032 KB |
Output is correct |
8 |
Correct |
171 ms |
50012 KB |
Output is correct |
9 |
Correct |
372 ms |
54644 KB |
Output is correct |
10 |
Correct |
326 ms |
52892 KB |
Output is correct |
11 |
Correct |
383 ms |
52300 KB |
Output is correct |
12 |
Correct |
448 ms |
47904 KB |
Output is correct |
13 |
Correct |
288 ms |
48508 KB |
Output is correct |
14 |
Correct |
254 ms |
48672 KB |
Output is correct |
15 |
Correct |
256 ms |
48584 KB |
Output is correct |
16 |
Correct |
246 ms |
48908 KB |
Output is correct |
17 |
Correct |
61 ms |
26700 KB |
Output is correct |
18 |
Correct |
98 ms |
29052 KB |
Output is correct |
19 |
Correct |
223 ms |
60568 KB |
Output is correct |
20 |
Correct |
168 ms |
50612 KB |
Output is correct |
21 |
Correct |
190 ms |
46016 KB |
Output is correct |
22 |
Correct |
467 ms |
51516 KB |
Output is correct |
23 |
Correct |
572 ms |
53224 KB |
Output is correct |
24 |
Correct |
459 ms |
52244 KB |
Output is correct |
25 |
Correct |
860 ms |
52128 KB |
Output is correct |
26 |
Execution timed out |
3006 ms |
51860 KB |
Time limit exceeded |
27 |
Halted |
0 ms |
0 KB |
- |