Submission #156368

# Submission time Handle Problem Language Result Execution time Memory
156368 2019-10-05T11:25:18 Z Akashi Potemkin cycle (CEOI15_indcyc) C++14
40 / 100
1000 ms 528148 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[y] = 0;
    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]) viz[it] = 1, f[it] = 2;

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

    return 0;
}

int main()
{
//    freopen("1.in", "r", stdin);
    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:70: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:74: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 380 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Execution timed out 1077 ms 526000 KB Time limit exceeded
# Verdict Execution time Memory Grader output
1 Correct 2 ms 504 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 504 KB Output is correct
2 Execution timed out 1096 ms 526160 KB Time limit exceeded
# Verdict Execution time Memory Grader output
1 Correct 9 ms 760 KB Output is correct
2 Correct 3 ms 760 KB Output is correct
3 Execution timed out 1101 ms 526324 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1083 ms 526380 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 17 ms 2168 KB Output is correct
2 Correct 10 ms 1784 KB Output is correct
3 Correct 252 ms 2168 KB Output is correct
4 Correct 112 ms 1784 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 1080 ms 527444 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 31 ms 2424 KB Output is correct
2 Correct 101 ms 2528 KB Output is correct
3 Execution timed out 1099 ms 528148 KB Time limit exceeded
4 Halted 0 ms 0 KB -