제출 #304472

#제출 시각아이디문제언어결과실행 시간메모리
304472Leonardo_Paes슈퍼트리 잇기 (IOI20_supertrees)C++17
21 / 100
258 ms22264 KiB
#include "supertrees.h" #include <vector> using namespace std; const int maxn = 1e3+10; int pai[maxn], sz[maxn]; int find(int x){ return pai[x] = (pai[x] == x ? x : find(pai[x])); } void join(int a, int b){ a = find(a), b = find(b); if(a == b) return; if(sz[a] > sz[b]) swap(a, b); sz[b] += sz[a]; pai[a] = b; } int construct(vector<vector<int> > p) { int n = p.size(); vector<vector<int> > ans; for(int i=0; i<n; i++){ vector<int> row; for(int j=0; j<n; j++){ row.push_back(0); } ans.push_back(row); } for(int i=0; i<n; i++){ pai[i] = i; sz[i] = 1; } for(int i=0; i<n; i++){ for(int j=i+1; j<n; j++){ if(p[i][j]) join(i, j); } } bool ok = 1; for(int i=0; i<n; i++){ for(int j=i+1; j<n; j++){ if(p[i][j] == 0){ if(find(i) == find(j)) ok = 0; } } } if(!ok) return 0; for(int i=0; i<n; i++){ int j = find(i); if(i != j) ans[i][j] = ans[j][i] = 1; } 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...