Submission #306213

#TimeUsernameProblemLanguageResultExecution timeMemory
306213sofapudenConnecting Supertrees (IOI20_supertrees)C++14
100 / 100
259 ms22360 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; vector<int> ufa; int uf(int ind){ if(ufa[ind] == ind)return ind; return ufa[ind] = uf(ufa[ind]); } int construct(vector<vector<int>> p) { int n = p.size(); ufa.resize(n); iota(ufa.begin(), ufa.end(), 0); vector<vector<int>> tog(n); vector<vector<int>> out(n, vector<int> (n,0)); vector<vector<int>> tre(n); for(auto i : p)for(auto x : i)if(x==3)return 0; for(int i = 0; i < n; ++i){ for(int j = 0; j < n; ++j){ if(p[i][j]){ int a = uf(i); int b = uf(j); if(a == b)continue; ufa[uf(i)] = ufa[uf(j)]; } } } for(int i = 0; i < n; ++i){ tog[uf(i)].push_back(i); } iota(ufa.begin(), ufa.end(), 0); for(int i = 0; i < n; ++i){ for(auto x : tog[i]){ for(auto y : tog[i]){ if(p[x][y] == 0)return 0; if(p[x][y] == 1){ int a = uf(x); int b = uf(y); if(a == b)continue; ufa[uf(x)] = ufa[uf(y)]; } } } vector<int> cy; for(auto x : tog[i]){ tre[uf(x)].push_back(x); if(x == uf(x))cy.push_back(x); } if(cy.size() == 1)continue; if(cy.size() == 2)return 0; int cn = 1; for(int j = 0; j < (int)cy.size(); ++j){ if(cn == (int)cy.size())cn = 0; out[cy[j]][cy[cn]] = out[cy[cn]][cy[j]] = 1; cn++; } } for(int i = 0; i < n; ++i){ for(int j = 1; j < (int)tre[i].size(); ++j){ out[tre[i][0]][tre[i][j]] = out[tre[i][j]][tre[i][0]] = 1; } } build(out); 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...