#include "supertrees.h"
#include <vector>
#include<bits/stdc++.h>
using namespace std;
int sz;
vector<vector<int> >v;
vector<vector<int> >ans;
int pr[1005];
int in[1005];
int fp(int a){
if(pr[a]==a){
return a;
}
return pr[a]=fp(pr[a]);
}
void un(int a,int b){
if(fp(a)!=fp(b)){
ans[a][b]=1;
ans[b][a]=1;
pr[fp(b)]=fp(a);
}
}
bool build_1(){
for(int i=0;i<sz;i++){
for(int j=i+1;j<sz;j++){
if(v[i][j]==1){
un(i,j);
}
}
}
return 1;
}
int use_2[1005];
bool build_2(){
for(int i=0;i<sz;i++){
if(in[i]==1){
for(int j=0;j<sz;j++){
if(v[i][j]==2&&fp(i)!=fp(j)){
return 0;
}
if(v[i][j]==0&&fp(i)==fp(j)){
return 0;
}
}
continue;
}
int en=i;
int count=0;
for(int j=0;j<sz;j++){
if(v[i][j]==2){
if(in[j]==1){
return 0;
}
un(en,j);
in[en]=1;
in[j]=1;
en=j;
count++;
}
}
if(count==1){
return 0;
}
ans[i][en]=1;
ans[en][i]=1;
}
return 1;
}
bool check_0(){
for(int i=0;i<sz;i++){
for(int j=i+1;j<sz;j++){
if(v[i][j]==0&&fp(i)==fp(j))return 0;
}
}
return 1;
}
int construct(vector<vector<int> > p) {
//cout<<"work"<<endl;
sz = p.size();
bool check=0;
v.resize(sz);
for(int i=0;i<sz;i++){
v[i].resize(sz);
}
for(int i=0;i<sz;i++){
for(int j=0;j<sz;j++){
//cout<<"i j "<<i<<" "<<j<<endl;
v[i][j]=p[i][j];
if(p[i][j]!=p[j][i]||(i==j&&p[i][j]!=1)){
check=1;
//cout<<"break"<<endl;
break;
}
}
}
//cout<<"work"<<endl;
if(check){
return 0;
}
//cout<<"work"<<endl;
ans.resize(sz);
for(int i=0;i<sz;i++){
ans[i].resize(sz);
}
for(int i=0;i<sz;i++){
pr[i]=i;
}
//cout<<"work"<<endl;
if(!build_2()){
//cout<<"break 2"<<endl;
return 0;
}
/*if(!build_1()){
cout<<"break 1"<<endl;
return 0;
}*/
if(!check_0()){
//cout<<"break 0";
return 0;
}else{
build(ans);
}
//cout<<"ans:"<<endl;
return 1;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
304 KB |
b[0][0] is not 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
304 KB |
b[0][0] is not 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
b[0][0] is not 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
300 KB |
b[0][0] is not 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
304 KB |
b[0][0] is not 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
304 KB |
b[0][0] is not 0 |
2 |
Halted |
0 ms |
0 KB |
- |