Submission #1216525

#TimeUsernameProblemLanguageResultExecution timeMemory
1216525LeonidCuk슈퍼트리 잇기 (IOI20_supertrees)C++20
100 / 100
315 ms22240 KiB
#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 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...