Submission #18675

#TimeUsernameProblemLanguageResultExecution timeMemory
18675suhgyuho_williamParachute rings (IOI12_rings)C++98
0 / 100
2279 ms66792 KiB
#include <vector> #include <stdio.h> #include <queue> using namespace std; int N; vector<int> edge[1000010]; bool check[1000010]; bool dcheck[1000010],flag; int q[1000010],top,rear; int jj; void dfs2(int x,int par){ int i,v,cnt = 0; dcheck[x] = true; for(i=0; i<edge[x].size(); i++){ v = edge[x][i]; if(v == par || v == jj) continue; if(dcheck[v]){ flag = false; continue; } dfs2(v,x); cnt++; } if(cnt >= 2) flag = false; } int checking(int x){ int i,t,v; jj = x; for(i=1; i<=N; i++) dcheck[i] = false; flag = true; dcheck[jj] = true; for(i=1; i<=N; i++){ if(!dcheck[i]){ t = 0; for(int k=0; k<edge[i].size(); k++){ v = edge[i][k]; if(v == jj) continue; t++; if(t == 3){ flag = false; break; } dfs2(v,i); } } if(!flag) break; } if(flag) return 1; else return 0; } void Init(int N_) { N = N_; } void Link(int A, int B) { A++; B++; edge[A].push_back(B); edge[B].push_back(A); } int problem,op; void dfs(int x,int par){ int i,v,cnt = 0; check[x] = true; for(i=0; i<edge[x].size(); i++){ v = edge[x][i]; if(v == par) continue; if(check[v]){ flag = false; if(problem <= 0 && op == 1){ if(checking(x) == 1) problem = x; else if(checking(v) == 1) problem = v; else problem = 0; } continue; } dfs(v,x); cnt++; } if(cnt >= 2){ flag = false; if(op == 1 && problem <= 0 && checking(x) == 1) problem = x; } } int ischain(int x){ int i,t; check[x] = true; t = 0; flag = true; for(i=0; i<edge[x].size(); i++){ t++; if(!check[edge[x][i]]) dfs(edge[x][i],x); } if(t >= 3){ flag = false; } if(flag) return 0; // chain else return 1; } int CountCritical() { int i,j,cnt,s,v; int ans; cnt = ans = op = 0; for(i=1; i<=N; i++) check[i] = false; for(i=1; i<=N; i++){ if(!check[i]){ if(ischain(i) == 1){ cnt++; s = i; } } } if(cnt >= 2) return 0; if(cnt == 0) return N; for(i=1; i<=N; i++) check[i] = false; cnt = edge[s].size(); if(cnt > 3){ ans += checking(s); return ans; }else if(cnt == 3){ ans += checking(s); for(i=0; i<edge[s].size(); i++){ v = edge[s][i]; ans += checking(v); } return ans; }else{ op = 1; problem = -1; i = ischain(s); s = problem; //printf("problem : %d\n",problem-1); if(problem <= 0) return 0; ans += checking(s); if(edge[s].size() > 3) return ans; for(i=0; i<edge[s].size(); i++){ v = edge[s][i]; ans += checking(v); } } //ans = 0; for(i=1; i<=N; i++) ans += checking(i); return ans; }

Compilation message (stderr)

rings.cpp: In function 'void dfs2(int, int)':
rings.cpp:18:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i=0; i<edge[x].size(); i++){
              ~^~~~~~~~~~~~~~~
rings.cpp: In function 'int checking(int)':
rings.cpp:37:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int k=0; k<edge[i].size(); k++){
                 ~^~~~~~~~~~~~~~~
rings.cpp: In function 'void dfs(int, int)':
rings.cpp:69:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i=0; i<edge[x].size(); i++){
              ~^~~~~~~~~~~~~~~
rings.cpp: In function 'int ischain(int)':
rings.cpp:93:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0; i<edge[x].size(); i++){
           ~^~~~~~~~~~~~~~~
rings.cpp: In function 'int CountCritical()':
rings.cpp:127:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(i=0; i<edge[s].size(); i++){
                  ~^~~~~~~~~~~~~~~
rings.cpp:141:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(i=0; i<edge[s].size(); i++){
            ~^~~~~~~~~~~~~~~
rings.cpp:105:8: warning: unused variable 'j' [-Wunused-variable]
  int i,j,cnt,s,v;
        ^
rings.cpp:135:5: warning: 's' may be used uninitialized in this function [-Wmaybe-uninitialized]
   i = ischain(s);
   ~~^~~~~~~~~~~~
#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...