Submission #156362

# Submission time Handle Problem Language Result Execution time Memory
156362 2019-10-05T10:55:51 Z Akashi Potemkin cycle (CEOI15_indcyc) C++14
20 / 100
35 ms 2424 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);
    }

    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);
         ~~~~~^~~~~~~~~~~~~~~~
# Verdict Execution time Memory 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
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 376 KB Wrong adjacency
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Incorrect 2 ms 376 KB Wrong answer on graph without induced cycle
# Verdict Execution time Memory Grader output
1 Correct 2 ms 504 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 520 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 9 ms 760 KB Output is correct
2 Incorrect 3 ms 732 KB Wrong adjacency
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 760 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 19 ms 2196 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 11 ms 1812 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 35 ms 2424 KB Wrong adjacency
2 Halted 0 ms 0 KB -