제출 #18671

#제출 시각아이디문제언어결과실행 시간메모리
18671suhgyuho_william낙하산 고리들 (IOI12_rings)C++98
0 / 100
2037 ms63264 KiB
#include <vector> #include <stdio.h> #include <queue> using namespace std; int N; vector<int> edge[1000010]; bool check[1000010],flag; int q[1000010],top,rear; int jj; void dfs2(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 || v == jj) continue; if(check[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++) check[i] = false; flag = true; check[jj] = true; for(i=1; i<=N; i++){ if(!check[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; 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; problem = x; continue; } dfs(v,x); cnt++; } if(cnt >= 2){ flag = false; 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 = 0; cnt = 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{ i = ischain(s); s = problem; rear = 1; q[1] = s; for(i=0; i<edge[s].size(); i++) q[++rear] = edge[s][i]; for(i=1; i<=rear; i++) check[q[i]] = true; for(i=2; i<=rear; i++){ v = q[i]; for(j=0; j<edge[v].size(); j++){ if(!check[edge[v][j]]){ q[++rear] = edge[v][j]; check[q[rear]] = true; } } } for(i=1; i<=rear; i++) ans += checking(q[i]); /*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); }*/ } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

rings.cpp: In function 'void dfs2(int, int)':
rings.cpp:17: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:36: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:68: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:88: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:122:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(i=0; i<edge[s].size(); i++){
                  ~^~~~~~~~~~~~~~~
rings.cpp:130:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(i=0; i<edge[s].size(); i++) q[++rear] = edge[s][i];
            ~^~~~~~~~~~~~~~~
rings.cpp:134:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(j=0; j<edge[v].size(); j++){
             ~^~~~~~~~~~~~~~~
rings.cpp:128:5: warning: 's' may be used uninitialized in this function [-Wmaybe-uninitialized]
   i = ischain(s); s = problem;
   ~~^~~~~~~~~~~~
#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...