#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
vector<bool>vis;
vector<int>dsu(1000);
int vfind(int a)
{
if(dsu[a]==a)return a;
return dsu[a]=vfind(dsu[a]);
}
void dfs(int i,vector<vector<int>>&p,vector<vector<int>>&res)
{
int n=p.size();
vis[i]=true;
for(int j=0;j<n;j++)
{
if(i==j)continue;
if(p[i][j]==1&&vis[j]==0)
{
res[i][j]=1;
res[j][i]=1;
dfs(j,p,res);
}
}
}
int construct(vector<vector<int>> p)
{
int n=p.size();
vis.resize(n);
for(int i=0;i<n;i++)
{
dsu[i]=i;
for(int j=0;j<n;j++)
{
if(p[i][j]==3)return 0;
}
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
for(int z=j+1;z<n;z++)
{
if(p[i][j]!=1&&p[j][z]==1&&p[i][z]==1)return 0;
if(p[i][j]==1&&p[j][z]==1&&p[i][z]!=1)return 0;
if(p[i][j]==1&&p[j][z]!=1&&p[i][z]==1)return 0;
}
if(p[i][j]!=0)
{
int a=vfind(dsu[i]),b=vfind(dsu[j]);
dsu[b]=a;
}
}
}
vector<vector<int>>res(n,vector<int>(n)),v(n);
for(int i=0;i<n;i++)
{
if(vis[i]==0)
{
dfs(i,p,res);
v[dsu[i]].push_back(i);
}
}
for(int i=0;i<n;i++)
{
if(v[i].size()==2)return 0;
else if(v[i].size()<2)continue;
int a=v[i].size()-1;
res[v[i][a]][v[i][0]]=1;
res[v[i][0]][v[i][a]]=1;
for(int j=0;j<v[i].size();j++)
{
for(int z=j+1;z<v[i].size();z++)
{
if(p[v[i][j]][v[i][z]]!=2)return 0;
}
}
for(int j=1;j<v[i].size();j++)
{
res[v[i][j]][v[i][j-1]]=1;
res[v[i][j-1]][v[i][j]]=1;
}
}
build(res);
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... |