답안 #804296

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
804296 2023-08-03T07:52:09 Z Warinchai 슈퍼트리 잇기 (IOI20_supertrees) C++14
0 / 100
1 ms 304 KB
#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 -