Submission #360950

#TimeUsernameProblemLanguageResultExecution timeMemory
360950GurbanConnecting Supertrees (IOI20_supertrees)C++17
100 / 100
295 ms24172 KiB
#include <bits/stdc++.h> #include "supertrees.h" using namespace std; using ll = long long; const int maxn=1e3+5; int p[maxn]; int nw[maxn]; vector<int>v[maxn]; int ata(int nd){ if(p[nd] == nd) return nd; return p[nd] = ata(p[nd]); } int par(int nd){ if(nw[nd] == nd) return nd; return nw[nd] = ata(nw[nd]); } int construct(vector<vector<int>> a) { int n = a.size(); for(int i = 0;i < n;i++) p[i] = nw[i] = i; for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ if(a[i][j] == 3) return 0; if(a[i][j] == 1){ int x = ata(i),y = ata(j); if(x != y) p[y] = x; } } } for(int i = 0;i < n;i++) ata(i); vector<vector<int>>ed; ed.resize(n); for(int i = 0;i < n;i++) ed[i].resize(n); for(int i = 0;i < n;i++){ if(p[i] != i){ if(a[i] != a[p[i]]) return 0; ed[p[i]][i] = 1; ed[i][p[i]] = 1; } else { for(int j = 0;j < n;j++){ if(p[j] != j or i == j) continue; if(a[i][j] == 2){ int x = par(i),y = par(j); if(x != y) nw[j] = i; } } } } for(int i = 0;i < n;i++){ if(p[i] != i) continue; par(i); v[nw[i]].push_back(i); } for(int i = 0;i < n;i++){ if(p[i] != i) continue; if(nw[i] != i) continue; if((int)v[i].size() == 2) return 0; for(int j = 0;j < (int)v[i].size();j++){ for(int k = 0;k < j;k++){ if(a[v[i][j]][v[i][k]] != 2) return 0; } if(j > 0){ ed[v[i][j]][v[i][j-1]]=1; ed[v[i][j-1]][v[i][j]]=1; } } if((int)v[i].size() > 1) ed[v[i].back()][v[i][0]]=1; if((int)v[i].size() > 1) ed[v[i][0]][v[i].back()]=1; } for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ if(i == j) continue; if(p[i] == p[j] and a[i][j] != 1) return 0; if(nw[i] == nw[j] and a[i][j] != 2) return 0; if(p[i] != p[j] and nw[p[i]] != nw[p[j]] and a[i][j] != 0) return 0; } } build(ed); return 1; } /* 4 1 1 2 2 1 1 2 2 2 2 1 2 2 2 2 1 2 1 0 0 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...