제출 #864759

#제출 시각아이디문제언어결과실행 시간메모리
864759andrei_boacaConnecting Supertrees (IOI20_supertrees)C++17
100 / 100
206 ms34108 KiB
#include "supertrees.h" #include <vector> #include <bits/stdc++.h> //#include "grader.cpp" using namespace std; int n; vector<vector<int>> adj; vector<int> muchii[1005],edges[1005]; int comp[1005],nrcomp; bool use[1005]; vector<int> v,nodes; bool good=1; vector<vector<int>> P; void calc(int nod) { use[nod]=1; v.push_back(nod); for(int i:edges[nod]) if(!use[i]) calc(i); } void dfs(int nod) { nodes.push_back(nod); comp[nod]=nrcomp; for(int i:muchii[nod]) if(!comp[i]) dfs(i); } void solve() { for(int i:v) for(int j:v) if(P[i][j]==0) { good=0; return; } vector<int> reprez; for(int i:v) for(int j:v) if(i!=j&&P[i][j]==1) muchii[i].push_back(j); for(int i:v) if(comp[i]==0) { nrcomp++; nodes.clear(); dfs(i); reprez.push_back(nodes[0]); for(int j=1;j<nodes.size();j++) { int a=nodes[j-1]; int b=nodes[j]; adj[a][b]=1; adj[b][a]=1; } } if(reprez.size()==2) { good=0; return; } int lg=reprez.size(); for(int i=0;i<reprez.size();i++) { int a=reprez[i]; int b=reprez[(i+1)%lg]; if(a!=b) adj[a][b]=adj[b][a]=1; } for(int i:v) for(int j:v) if(i!=j) { if(P[i][j]==1&&comp[i]!=comp[j]) { good=0; return; } if(P[i][j]==2&&comp[i]==comp[j]) { good=0; return; } } } int construct(std::vector<std::vector<int>> p) { P=p; good=1; n=p.size(); adj.resize(n); for(int i=0;i<n;i++) adj[i].resize(n); bool sub1=1; bool sub2=1; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { sub1&=(p[i][j]<=2); if(p[i][j]>0&&i!=j) edges[i].push_back(j); } if(sub1) { for(int i=0;i<n;i++) if(!use[i]) { v.clear(); calc(i); solve(); if(good==0) return 0; } build(adj); return 1; } return 0; }

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

supertrees.cpp: In function 'void solve()':
supertrees.cpp:52:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |             for(int j=1;j<nodes.size();j++)
      |                         ~^~~~~~~~~~~~~
supertrees.cpp:66:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for(int i=0;i<reprez.size();i++)
      |                 ~^~~~~~~~~~~~~~
supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:98:10: warning: unused variable 'sub2' [-Wunused-variable]
   98 |     bool sub2=1;
      |          ^~~~
#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...