Submission #3781

#TimeUsernameProblemLanguageResultExecution timeMemory
3781cki86201Cactus? Not cactus? (kriii1_C)C++98
0 / 1
76 ms12172 KiB
#include<stdio.h> #include<vector> using namespace std; vector<int> edge[100000]; vector<int> now; bool check[100000]={0}; bool check_cycle[100000]={0}; bool ans=false; int distime[100000]={0},deltime[100000]={0},time=0; void dfs(int a,int par){ check[a]=true; distime[a]=time++; now.push_back(a); int i,j; for(i=0;i<edge[a].size();i++){ if(check[edge[a][i]] && edge[a][i]!=par && distime[edge[a][i]]<distime[a]){ if(check_cycle[edge[a][i]]){ ans=true; return; } else{ for(j=now.size()-1;j>=0;j--){ check_cycle[now[j]]=true; if(now[j]==edge[a][i]) break; } } } else if(!check[edge[a][i]]){ dfs(edge[a][i],a); if(ans) return; } } deltime[a]=time++; now.pop_back(); } int main() { int i,n,m,a,b; scanf("%d%d",&n,&m); for(i=0;i<m;i++){ scanf("%d%d",&a,&b); edge[a-1].push_back(b-1); edge[b-1].push_back(a-1); } dfs(0,0); if(ans) printf("Not cactus"); else printf("Cactus"); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...