제출 #627494

#제출 시각아이디문제언어결과실행 시간메모리
627494ttamx슈퍼트리 잇기 (IOI20_supertrees)C++17
21 / 100
218 ms22096 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; vector<vector<int>> ans; vector<int> adj[1005],adj2[1005]; int pa[1005],pa2[1005]; bool vis[1005],vis2[1005]; int fp(int u){ if(pa[u]==u)return u; return pa[u]=fp(pa[u]); } int fp2(int u){ if(pa2[u]==u)return u; return pa2[u]=fp2(pa2[u]); } void dfs(int u){ for(auto v:adj[u]){ if(vis[v])continue; pa[fp(u)]=fp(v); vis[v]=1; ans[u][v]=1; ans[v][u]=1; adj2[u].emplace_back(v); adj2[v].emplace_back(u); dfs(v); } } int construct(vector<vector<int>> p) { int n = p.size(); for(int i=0;i<n;++i)pa[i]=i; for (int i = 0; i < n; i++) { vector<int> row; row.resize(n); ans.push_back(row); } for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ if(p[i][j]==3)return 0; if(p[i][j]==1){ pa[fp(i)]=fp(j); } if(p[i][j]==2){ pa2[fp(i)]=fp2(j); adj[i].emplace_back(j); } } } for(int i=0;i<n;++i){ if(i==fp(i))continue; ans[i][fp(i)]=1; ans[fp(i)][i]=1; } for(int i=0;i<n;++i)dfs(i); for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ if(ans[i][j]==1&&p[i][j]==0)return 0; if(fp2(i)!=fp2(j)&&fp(i)==fp(j))return 0; } } 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...