제출 #305268

#제출 시각아이디문제언어결과실행 시간메모리
305268chubyxdxd슈퍼트리 잇기 (IOI20_supertrees)C++17
11 / 100
238 ms22136 KiB
#include "supertrees.h" #include <bits/stdc++.h> #include <vector> using namespace std; int pad[2000]; void init(int x){ for(int i=0;i<=x;i++){ pad[i]=i; } } int findset(int i){ if(pad[i]==i)return i; return pad[i]=findset(pad[i]); } bool issameset(int i,int j){ return findset(i)==findset(j); } void unionset(int i,int j){ pad[i]=findset(j); } int construct(vector<vector<int>> p) { int n = p.size(); init(n); vector<vector<int>> answer; for(int i=0;i<n;i++){ answer.push_back(vector<int>(n,0)); } int cnt=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(p[i][j]==1)cnt++; } } int sw=1; if(cnt==n*n){ //cout<<123<<endl; for(int i=0;i<n-1;i++){ answer[i][i+1]=1; answer[i+1][i]=1; } } else{ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(p[i][j]==1){ if(!issameset(i,j)){unionset(i,j); answer[i][j]=1; answer[j][i]=1; } continue; } } }/* for(int i=0;i<n;i++){ cout<<findset(i)<<" "; } cout<<endl;*/ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(p[i][j]==1){ if(issameset(i,j)){} else sw=0; //if(sw==0)cout<<i<<" gg "<<j<<endl; } else{ if(issameset(i,j))sw=0; //if(sw==0)cout<<i<<" gg1 "<<j<<endl; } } } /*cout<<sw<<endl; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<answer[i][j]<<" "; } cout<<endl; }*/ } if(sw){ build(answer); return 1;} else return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...