Submission #1194355

#TimeUsernameProblemLanguageResultExecution timeMemory
1194355cpdreamerConnecting Supertrees (IOI20_supertrees)C++20
19 / 100
133 ms30240 KiB
#include "supertrees.h" #include <vector> #include <bits/stdc++.h> using namespace std; #define pb push_back #define V vector using namespace std; typedef long long ll; #define all(v) v.begin(), v.end() #define P pair #define F first #define S second V<int>adj[(int)2000]; V<int>comp(2000); V<bool>visited(2000); void dfs(int nd,int s,V<int>&vp){ if(visited[nd]){ return; } vp.pb(nd); visited[nd]=true; comp[nd]=s; for(auto u:adj[nd]){ dfs(u,s,vp); } } int construct(std::vector<std::vector<int>> p) { int n = p.size(); std::vector<std::vector<int>> answer(n,V<int>(n,0)); for(int i=0;i<n;i++){ comp[i]=i; visited[i]=false; } V<V<int>>C; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(p[i][j]==2 && i!=j){ adj[i].pb(j); adj[j].pb(i); } } } for(int i=0;i<n;i++){ V<int>vp; dfs(i,i,vp); if(!vp.empty()){ C.pb(vp); } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(comp[i]==comp[j] && p[i][j]==0)return 0; } } for(auto u:C){ if(u.size()==1)continue; if(u.size()==2){ return 0; } for(int i=0;i<(int)u.size()-1;i++){ answer[u[i]][u[i+1]]=1; answer[u[i+1]][u[i]]=1; } answer[u[0]][u[(int)u.size()-1]]=1; answer[u[(int)u.size()-1]][u[0]]=1; } build(answer); 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...