#include "supertrees.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> p;
int find(int a){
if (a == p[a]) return p[a];
return p[a] = find(p[a]);
}
void merge(int a, int b){
a = find(a);
b = find(b);
if (a != b) p[b] = a;
}
int construct(vector<vector<int>> a){
int n = a.size();
p.resize(n);
for (int i=0; i<n; i++) p[i] = i;
for (int i=0; i<n; i++){
for (int j=i+1; j<n; j++){
if (a[i][j] == 3) return 0;
if (a[i][j] > 0) merge(i, j);
}
}
for (int i=0; i<n; i++){
for (int j=i+1; j<n; j++){
if (a[i][j] == 0 && find(i) == find(j)) return 0;
}
}
vector<vector<int>> cc(n);
for (int i=0; i<n; i++) cc[find(i)].push_back(i);
for (int i=0; i<n; i++) p[i] = i;
for (int i=0; i<n; i++){
for (int j=i+1; j<n; j++){
if (a[i][j] == 1) merge(i, j);
}
}
for (int i=0; i<n; i++){
for (int j=i+1; j<n; j++){
if (a[i][j] == 2 && find(i) == find(j)) return 0;
}
}
vector<vector<int>> ans(n, vector<int>(n, 0));
for (int i=0; i<n; i++){
if (i != find(i)) ans[i][find(i)] = ans[find(i)][i] = 1;
vector<int> cy;
for (int x : cc[i]){
if (x == find(x)) cy.push_back(x);
}
if (cy.size() == 1) continue;
for (int i=0; i<cy.size(); i++) ans[cy[i]][cy[(i+1)%cy.size()]] = ans[cy[(i+1)%cy.size()]][cy[i]] = 1;
}
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... |