Submission #366960

#TimeUsernameProblemLanguageResultExecution timeMemory
366960MilosMilutinovicConnecting Supertrees (IOI20_supertrees)C++14
40 / 100
298 ms26988 KiB
#include <bits/stdc++.h> #include "supertrees.h" using namespace std; #define pb push_back const int N=1050; vector<int> E[N]; void AddEdge(int u,int v){E[u].pb(v),E[v].pb(u);} bool was[N]; vector<int> comp; void DFS(int u){ was[u]=true,comp.push_back(u); for(int v:E[u])if(!was[v])DFS(v); } int construct(vector<vector<int>> p){ int n=(int)p.size(); for(int i=0;i<n;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;j<n;j++)if(p[i][j]>0)AddEdge(i,j); vector<vector<int>> ans(n,vector<int>(n,0)); bool two=false; for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(p[i][j]==2)two=true; for(int i=0;i<n;i++){ if(!was[i]){ DFS(i); if(two&&(int)comp.size()==2)return 0; for(int x:comp)for(int y:comp)if(x!=y&&p[x][y]==0)return 0; for(int i=1;i<(int)comp.size();i++){ int x=comp[i],y=comp[i-1]; ans[x][y]=ans[y][x]=1; } if(two&&(int)comp.size()>=3){ int x=comp[0],y=comp.back(); ans[x][y]=ans[y][x]=1; } comp.clear(); } } build(ans); 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...