제출 #487755

#제출 시각아이디문제언어결과실행 시간메모리
487755ala2슈퍼트리 잇기 (IOI20_supertrees)C++14
0 / 100
12 ms23756 KiB
#include "supertrees.h" #include <vector> #include<iostream> using namespace std; int pa[1001000]; int sz[1001000]; int root(int x) { while(x!=pa[x]) { pa[x]=pa[pa[x]]; x=pa[x]; } return x; } void unit(int x,int y) { x=root(x); y=root(y); if(x==y) return ; if(sz[x]>sz[y]) { sz[x]+=sz[y]; pa[y]=x; } else { sz[y]+=sz[x]; pa[x]=y; } } vector<int>v[1001000]; int construct(vector<vector<int>> p) { int n = p.size(); vector<vector<int>> answer; for (int i = 0; i < n; i++) { vector<int> row; row.resize(n); answer.push_back(row); } for(int i=0;i<n;i++) { pa[i]=i; sz[i]=1; } int bb=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(p[i][j]) { //cout<<" "<<i<<" " <<j<<" "<<root(i)<<" "<<root(j)<<" "; unit(i,j); // cout<<root(i)<<endl; } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(p[i][j]&&root(i)!=root(j)) bb=1; if(p[i][j]==0&&root(i)==root(j)) bb=1; } } for(int i=0;i<n;i++) { // cout<<" "<<i<<" "<<root(i)<<endl; v[root(i)].push_back(i); } for(int i=0;i<n;i++) { answer[i][i]=1; if(i!=root(i)) continue; answer[i][i]=1; // cout<<v[i].size()<<endl; if(v[i].size()==2) bb=1; for(int j=0;j<v[i].size()-1;j++) { int x=v[i][j]; int y=v[i][j+1]; // cout<<x<<" "; // if(j==v[i].size()-1) // cout<<y<<" "; if(i==v[i].size()-2) { answer[y][v[i][0]]=1; answer[v[i][0]][y]=1; } answer[x][y]=1; answer[y][x]=1; } } for(int i=0;i<n;i++) { answer[i][i]=1; } if(bb) return 0; build(answer); return 1; }

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

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:83:7: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   83 |       if(v[i].size()==2)
      |       ^~
supertrees.cpp:85:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   85 |         for(int j=0;j<v[i].size()-1;j++)
      |         ^~~
supertrees.cpp:85:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |         for(int j=0;j<v[i].size()-1;j++)
      |                     ~^~~~~~~~~~~~~~
supertrees.cpp:93:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |             if(i==v[i].size()-2)
      |                ~^~~~~~~~~~~~~~~
supertrees.cpp:107:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
  107 |     if(bb)
      |     ^~
supertrees.cpp:109:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
  109 |  build(answer);
      |  ^~~~~
#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...