This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "supertrees.h"
using namespace std;
//void build(vector<vector<int> >);
struct UnionFind {
vector<int> root;
UnionFind(int N) {
root.resize(N);
fill(root.begin(),root.end(),-1);
}
int Find(int a) {
if(root[a] < 0) return a;
int r = Find(root[a]);
root[a] = r;
return r;
}
void Merge(int a, int b) {
a = Find(a);
b = Find(b);
if(a == b) return;
if(root[a] > root[b]) swap(a, b);
root[a] += root[b];
root[b] = a;
}
};
int construct(vector<vector<int> > p) {
vector<vector<int> > ans;
int N = p.size();
ans.resize(N);
int i;
for(i=0;i<N;i++) ans[i].resize(N);
int j;
UnionFind UF(N);
for(i=0;i<N;i++) {
for(j=0;j<i;j++) {
if(p[i][j]) {
ans[i][UF.Find(j)] = 1;
ans[UF.Find(j)][i] = 1;
UF.Merge(i, j);
}
}
}
for(i=0;i<N;i++) {
for(j=0;j<i;j++) {
if(!p[i][j]) {
if(UF.Find(i)==UF.Find(j)) return 0;
}
}
}
build(ans);
return 1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |