#include <bits/stdc++.h>
#include "supertrees.h"
using namespace std;
struct dsu {
vector<int> p, sz;
dsu(int n) {
p.resize(n);
iota(p.begin(), p.end(), 0);
sz.resize(n, 1);
};
int f (int x) {
return (p[x] == x? x: p[x] = f(p[x]));
};
int unin(int x, int y) {
x = f(x); y = f(y);
if(x == y) return 0;
if(sz[x] < sz[y]) swap(x, y);
sz[y] += sz[y];
p[y] = x;
return 1;
};
};
int construct(vector<vector<int>> p) {
int n = p.size();
vector<vector<int>> ans(n, vector<int> (n));
dsu t(n);
auto ad = [&](int x, int y) {
ans[x][y] = 1;
ans[y][x] = 1;
t.unin(x, y);
};
for(int i = 0; i < n; i ++ ) {
for(int j = 0; j < n; j ++ ) {
if(p[i][j] == 1 && t.unin(i, j)) ad(i, j);
};
};
for(int i = 0; i < n; i ++ ) {
for(int j = 0; j < n; j ++ ) {
if(t.f(i) == t.f(j) && p[i][j] == 0) return 0;
};
};
//{vector<int> ch(n);
//for(int i = 0; i < n; i ++ ) {
//if(ch[i])continue;
//vector<int> vs(n);
//};
//};
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... |