제출 #849600

#제출 시각아이디문제언어결과실행 시간메모리
849600abcvuitunggio슈퍼트리 잇기 (IOI20_supertrees)C++17
100 / 100
194 ms24144 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; int n,l[1001]; vector <int> v,ve[1001]; vector <vector <int>> g; int f(int u){ return (l[u]<0?u:l[u]=f(l[u])); } bool unite(int u, int v){ u=f(u); v=f(v); if (u==v) return false; if (l[u]<l[v]) swap(u,v); l[u]+=l[v]; l[v]=u; return true; } int construct(vector <vector <int>> p){ n=p.size(); g.resize(n); for (int i=0;i<n;i++) g[i].resize(n); memset(l,-1,sizeof(l)); for (auto i:p) for (int j:i) if (j==3) return 0; for (int i=0;i<n;i++) for (int j=i+1;j<n;j++) if (p[i][j]==1) g[i][j]=g[j][i]=unite(i,j); for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (f(i)==f(j)&&p[i][j]!=1) return 0; for (int i=0;i<n;i++) if (f(i)==i) v.push_back(i); memset(l,-1,sizeof(l)); for (int i=0;i<n;i++) for (int j=i+1;j<n;j++) if (p[i][j]==2) unite(i,j); for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (f(i)==f(j)&&!p[i][j]) return 0; for (int i:v) ve[f(i)].push_back(i); for (int i=0;i<n;i++){ if (ve[i].size()<=1) continue; if (ve[i].size()==2) return 0; for (int j=0;j<ve[i].size();j++){ int u=ve[i][j],v=ve[i][(j+1)%ve[i].size()]; g[u][v]=g[v][u]=1; } } build(g); return 1; }

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

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:58:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |         for (int j=0;j<ve[i].size();j++){
      |                      ~^~~~~~~~~~~~~
#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...