Submission #1230510

#TimeUsernameProblemLanguageResultExecution timeMemory
1230510Hamed_GhaffariConnecting Supertrees (IOI20_supertrees)C++20
100 / 100
123 ms26204 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; const int MXN = 1003; int n; vector<vector<int>> p, b; vector<int> V; int mark[MXN]; void dfs1(int v) { mark[v] = 1; V.push_back(v); for(int u=0; u<n; u++) if(p[v][u] && !mark[u]) dfs1(u); } vector<int> V2; void dfs2(int v) { mark[v] = 2; V2.push_back(v); for(int u=0; u<n; u++) if(p[v][u]==1 && mark[u]==1) dfs2(u); } bool solve() { for(int v : V) for(int u : V) if(p[v][u]==0) return 0; vector<int> vec; for(int v : V) if(mark[v]==1) { V2.clear(); dfs2(v); for(int i : V2) for(int j : V2) if(p[i][j]==2) return 0; vec.push_back(v); for(int i=0; i+1<V2.size(); i++) b[V2[i]][V2[i+1]] = b[V2[i+1]][V2[i]] = 1; } if(vec.size()==1) return 1; if(vec.size()==2) return 0; for(int i=0; i+1<vec.size(); i++) b[vec[i]][vec[i+1]] = b[vec[i+1]][vec[i]] = 1; b[vec[0]][vec.back()] = b[vec.back()][vec[0]] = 1; return 1; } int construct(vector<vector<int>> p) { ::p = p; n = p.size(); b = vector<vector<int>>(n, vector<int>(n, 0)); for(auto &i: p) for(int j : i) if(j==3) return 0; for(int v=0; v<n; v++) if(!mark[v]) { V.clear(); dfs1(v); if(!solve()) return 0; } build(b); 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...