답안 #156366

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
156366 2019-10-05T11:20:34 Z Akashi Potemkin cycle (CEOI15_indcyc) C++14
20 / 100
31 ms 2020 KB
#include <bits/stdc++.h>
using namespace std;

int n, m;
bool ad[1005][1005];
bool viz[1005];
int f[1005], TT[1005];
vector <int> v[1005];
vector <int> sol;
queue <int> q;

void find_path(int x, int y){
    q.push(x); viz[x] = 1;
    while(!q.empty()){
        int nod = q.front();
        q.pop();
        for(auto it : v[nod])
            if(!viz[it]) viz[it] = 1, TT[it] = nod, q.push(it);
    }

    while(y != x){
        sol.push_back(y);
        y = TT[y];
    }
    sol.push_back(x);
}

bool find(int nod){
    for(auto it : v[nod])
        if(!f[it]) f[it] = 3, q.push(it);

    if(q.empty()) return 0;

    set <int> nodes;
    nodes.insert(nod);

    while(!q.empty()){
        int nod = q.front();
        q.pop();
        for(auto it : v[nod]){
            if(!f[it]) f[it] = 3, q.push(it);
            if(f[it] == 2) nodes.insert(it);
        }
    }

    for(auto x : nodes){
        for(auto y : nodes){
            if(!ad[x][y] && x != y){
                find_path(x, y);
                return 1;
            }
        }
    }

    return 0;
}

bool solve(int nod){
    f[nod] = 1; viz[nod] = 1;
    for(auto it : v[nod]) f[it] = 2;

    for(auto it : v[nod]) if(find(it)) return 1;

    return 0;
}

int main()
{
    scanf("%d%d", &n, &m);

    int x, y;
    for(int i = 1; i <= m ; ++i){
        scanf("%d%d", &x, &y);
        v[x].push_back(y);
        v[y].push_back(x);
        ad[x][y] = ad[y][x] = 1;
    }

    for(int i = 1; i <= n ; ++i){
        sol.push_back(i);
        memset(f, 0, sizeof(f));
        memset(viz, 0, sizeof(viz));
        if(solve(i)) break ;
        sol.pop_back();
    }

    if(sol.size() == 0) printf("no");
    else for(auto it : sol) printf("%d ", it);


    return 0;
}

Compilation message

indcyc.cpp: In function 'int main()':
indcyc.cpp:69:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &n, &m);
     ~~~~~^~~~~~~~~~~~~~~~
indcyc.cpp:73:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &x, &y);
         ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 380 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Wrong adjacency
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Incorrect 2 ms 376 KB Wrong answer on graph without induced cycle
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 504 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 760 KB Output is correct
2 Incorrect 3 ms 632 KB Wrong adjacency
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 760 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 18 ms 2020 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 11 ms 1656 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 31 ms 1784 KB Wrong adjacency
2 Halted 0 ms 0 KB -