Submission #819883

#TimeUsernameProblemLanguageResultExecution timeMemory
819883Abrar_Al_SamitConnecting Supertrees (IOI20_supertrees)C++17
100 / 100
182 ms24212 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; const int nax = 1000; int par[nax], sz[nax]; vector<int>L[nax]; bool done[nax]; int find(int v) { return par[v] = (v == par[v]) ? v : find(par[v]); } void unite(int u, int v) { u = find(u), v = find(v); if(u==v) return; if(sz[u] < sz[v]) swap(u, v); for(int x : L[v]) { L[u].push_back(x); } sz[u] += sz[v]; par[v] = u; } int construct(vector<vector<int>> p) { int n = p.size(); for(int i=0; i<n; ++i) { par[i] = i, sz[i] = 1; L[i] = {i}; } for(int i=0; i<n; ++i) { for(int j=0; j<n; ++j) if(p[i][j]) { unite(i, j); } } for(int i=0; i<n; ++i) { for(int j=0; j<n; ++j) if(!p[i][j]) { if(find(i) == find(j)) return 0; } } vector<vector<int>>ans(n, vector<int>(n)); for(int i=0; i<n; ++i) if(i == find(i)) { vector<int>heads; for(int v : L[i]) if(!done[v]) { done[v] = true; set<int>curL; for(int u=0; u<n; ++u) { if(p[u][v]==1 && u!=v) { ans[u][v] = ans[v][u] = 1; done[u] = true; curL.insert(u); } } for(int x : curL) { for(int y : curL) { if(p[x][y]!=1) return 0; } } curL.insert(v); for(int x : L[i]) { for(int y : curL) { if(!curL.count(x)) { if(p[x][y]!=2) return 0; } } } heads.push_back(v); } if(heads.size()==2) return 0; if(heads.size()==1) continue; for(int i=0; i<heads.size(); ++i) { int v = heads[i]; int u = heads[(i+1)%heads.size()]; ans[u][v] = ans[v][u] = 1; } } build(ans); return 1; }

Compilation message (stderr)

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