Submission #385706

#TimeUsernameProblemLanguageResultExecution timeMemory
385706DavidDamianConnecting Supertrees (IOI20_supertrees)C++17
21 / 100
268 ms22380 KiB
#include "supertrees.h" #include <vector> using namespace std; int link[1005]; int setSize[1005]; void init(int n) { for(int i=1;i<=n;i++){ link[i]=i; setSize[i]=1; } } int root(int u) { if(link[u]==u) return u; else return link[u]=root(link[u]); } bool same(int a,int b) { return root(a)==root(b); } void unite(int a,int b) { a=root(a); b=root(b); if(setSize[b]>setSize[a]) swap(a,b); setSize[a]+=setSize[b]; link[b]=a; } int construct(vector< vector<int> > p) { int n = p.size(); init(n+3); 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++){ for(int j=0;j<n;j++){ if(p[i][j]==1 && !same(i+1,j+1)){ int a=root(i+1); int b=root(j+1); answer[a-1][b-1]=1; answer[b-1][a-1]=1; unite(a,b); } } } bool possible=true; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(p[i][j]!=same(i+1,j+1)) possible=false; } } if(!possible) return 0; build(answer); return 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...