Submission #36221

#TimeUsernameProblemLanguageResultExecution timeMemory
36221mohammad_kilaniPotemkin cycle (CEOI15_indcyc)C++14
100 / 100
546 ms3104 KiB
#include <bits/stdc++.h> using namespace std; #define mod 1000000007 #define oo 2000000000 const int N = 1010; int n , m , vi = 0 , vis[N] , pre[N] , comp[N]; bitset < N > con[N] ; vector< int > g[N]; vector< vector<int> > adj; void DFS(int node,int c,int cant){ vis[node] = vi; comp[node] = c; for(int i=0;i<g[node].size();i++){ if(g[node][i] == cant || con[cant][g[node][i]] || vis[g[node][i]] == vi) continue; DFS(g[node][i],c,cant); } } bool BFS(int s,int e){ vi++; queue < pair<int,int> > q; vis[s] = vi; pre[s] = s; for(int i=0;i<g[s].size();i++){ int node = g[s][i]; if(node == e || (con[node][e])) continue; vis[node] = vi; q.push(make_pair(node,s)); } while(!q.empty()){ int node = q.front().first; int last = q.front().second; q.pop(); pre[node] = last; if(node == e) return true; for(int i=0;i<g[node].size();i++){ int newnode = g[node][i]; if(vis[newnode] == vi || (con[newnode][s] && con[newnode][e])) continue; vis[newnode] = vi; q.push(make_pair(newnode,node)); } } return false; } int main() { //freopen("in.txt","r",stdin); scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ int u , v; scanf("%d%d",&u,&v); g[u].push_back(v); g[v].push_back(u); con[u][v] = con[v][u] = true; } for(int i=1;i<=n;i++){ adj.clear(); vi++; memset(comp,0,sizeof(comp)); int cnt = 0 ; for(int j=1;j<=n;j++){ if(j == i || vis[j] == vi || con[j][i]) continue; DFS(j,cnt++,i); } adj.resize(cnt); for(int j=1;j<=n;j++){ if(con[i][j] && i != j){ bitset < N > in; for(int k=0;k<g[j].size();k++){ if(g[j][k] == i || con[i][g[j][k]] || in[comp[g[j][k]]]) continue; adj[comp[g[j][k]]].push_back(j); in[comp[g[j][k]]] = true; } } } for(int j=0;j<cnt;j++){ for(int k=0;k<adj[j].size();k++){ for(int l=k+1;l<adj[j].size();l++){ if(adj[j][k] == adj[j][l] || con[adj[j][k]][adj[j][l]]) continue; int cur = adj[j][l]; assert(BFS(i,cur) == true); while(pre[cur] != cur){ printf("%d ",cur); cur = pre[cur]; } printf("%d\n",cur); return 0; } } } } puts("no"); return 0; }

Compilation message (stderr)

indcyc.cpp: In function 'void DFS(int, int, int)':
indcyc.cpp:14:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<g[node].size();i++){
               ^
indcyc.cpp: In function 'bool BFS(int, int)':
indcyc.cpp:25:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<g[s].size();i++){
               ^
indcyc.cpp:37:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<g[node].size();i++){
                ^
indcyc.cpp: In function 'int main()':
indcyc.cpp:70:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int k=0;k<g[j].size();k++){
                  ^
indcyc.cpp:78:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int k=0;k<adj[j].size();k++){
                 ^
indcyc.cpp:79:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int l=k+1;l<adj[j].size();l++){
                    ^
indcyc.cpp:49:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&m);
                     ^
indcyc.cpp:52:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d",&u,&v);
                      ^
#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...