답안 #748921

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
748921 2023-05-27T07:00:44 Z 반딧불(#9966) Povjerenstvo (COI22_povjerenstvo) C++17
13 / 100
3000 ms 60568 KB
#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 -