Submission #246545

#TimeUsernameProblemLanguageResultExecution timeMemory
246545dantoh000Potemkin cycle (CEOI15_indcyc)C++14
50 / 100
1115 ms530136 KiB
#include <bits/stdc++.h>
using namespace std;
int n,m;
int id[1005][1005];
int A[1005];
int B[1005];
int p[100005];
vector<int> ans;
void dfs(int a, int b){
    for (int c = 1; c <= n; c++){
        if (c != a && id[b][c] && !id[a][c]){
            if (p[id[b][c]] == 0){
                p[id[b][c]] = id[a][b];
                dfs(b,c);
            }
            else{
                //printf("cycle found to %d %d\n",b,c);
                bool can = true;
                int ca = a, cb = b;
                while (ca != b && cb != c){
                    int K = p[id[ca][cb]];
                    if (K == -1) {
                        can = false;
                        break;
                    }
                    int na = A[K], nb = B[K];
                    if (nb != ca) swap(na,nb);
                    //printf("%d %d\n",ca,cb);
                    ans.push_back(cb);
                    ca = na;
                    cb = nb;
                }
                if (can){
                    ans.push_back(cb);
                    for (auto x : ans) printf("%d ",x);
                    printf("\n");
                    exit(0);
                }
                else ans.clear();
            }

        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for (int i = 1; i <= m; i++){
        scanf("%d%d",&A[i],&B[i]);
        id[B[i]][A[i]] = id[A[i]][B[i]] = i;
    }
    for (int i = 1; i <= m; i++){
        if (p[i] == 0) {
            p[id[A[i]][B[i]]] = -1;
            dfs(A[i],B[i]);
        }
    }

    printf("no");
}

Compilation message (stderr)

indcyc.cpp: In function 'int main()':
indcyc.cpp:46: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:48:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&A[i],&B[i]);
         ~~~~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...