#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
#define en '\n'
#define sp ' '
const int N=1000;
int par[N],chk[N][N],vis[N],branch[N];
map<int,vector<int>> m,l;
int find(int a){
if(a!=par[a])return par[a]=find(par[a]);
return par[a];
}
int construct(vector<vector<int>> p) {
int n = p.size();
vector<vector<int>> answer;
for (int i = 0; i < n; i++) {
vector<int> row;
row.resize(n);
answer.push_back(row);
}
for(int i=0;i<N;i++)par[i]=i;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(p[i][j]==3)return 0;
else if(!p[i][j] && par[find(i)]==par[find(j)])return 0;
else if(p[i][j] && chk[i][j]==-1 || !p[i][j] && chk[i][j]==1)return 0;
else if(p[i][j] && (chk[i][j]==0 || chk[i][j]==1)){
chk[i][j]=1;
par[find(i)]=par[find(j)];
}
else if(!p[i][j] && (chk[i][j]==0 || chk[i][j]==-1)){
chk[i][j]=-1;
}
else return 0;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(par[find(i)]==par[find(j)] && !p[i][j])return 0;
else if(par[find(i)]!=par[find(j)] && p[i][j])return 0;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)chk[i][j]=0;
}
for(int i=0;i<n;i++){
m[par[i]].push_back(i);
}
for(int i=0;i<n;i++)par[i]=i;
vector<int> v;
set<vector<int>> s;
for(auto [k,u]:m){
for(int i=0;i<u.size();i++){
for(int j=0;j<u.size();j++){
if(p[u[i]][u[j]]==2 && par[find(u[i])]==par[find(u[j])])return 0;
else if(p[u[i]][u[j]]==1 && chk[u[i]][u[j]]==-1 || p[u[i]][u[j]]==2 && chk[u[i]][u[j]]==1)return 0;
else if(p[u[i]][u[j]]==1 && (chk[u[i]][u[j]]==0 || chk[u[i]][u[j]]==1)){
chk[u[i]][u[j]]=1;
par[find(u[i])]=par[find(u[j])];
}
else if(p[u[i]][u[j]]==2 && (chk[u[i]][u[j]]==0 || chk[u[i]][u[j]]==-1)){
chk[u[i]][u[j]]=-1;
}
else return 0;
}
}
for(int i=0;i<u.size();i++){
for(int j=0;j<u.size();j++){
if(p[u[i]][u[j]]==1 && par[find(u[i])]!=par[find(u[j])])return 0;
else if(p[u[i]][u[j]]==2 && par[find(u[i])]==par[find(u[j])])return 0;
}
}
l.clear();
for(int i=0;i<u.size();i++){
l[par[u[i]]].push_back(u[i]);
}
vector<int> c;
for(auto [j,v]:l){
c.push_back(j);
for(auto i:v){
if(i!=j)answer[j][i]=answer[i][j]=1;
}
}
for(int i=0;i<c.size();i++){
if(i!=(i+1)%c.size())answer[c[i]][c[(i+1)%c.size()]]=answer[c[(i+1)%c.size()]][c[i]]=1;
}
}
build(answer);
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... |