제출 #1015804

#제출 시각아이디문제언어결과실행 시간메모리
1015804XJP12Connecting Supertrees (IOI20_supertrees)C++14
0 / 100
1092 ms344 KiB
#include <bits/stdc++.h> #include "supertrees.h" using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; int n; struct UF{ vi e; UF(int n){ e.resize(n,-1);} int find(int x){ return (e[x] > 0 ? x : find(-e[x])); } void _union(int a, int b){ int x = find(a); int y = find(b); if(x == y) return; if(e[x] < e[y]) swap(x,y); e[x] += e[y]; e[y] = -x; } }; int construct(vvi p){ n = p.size(); int ban=0; UF fu(n); vvi ans(n, vi(n,0)); vvi conect(n, vi()); for(int i=0; i<n; i++){ for(int j=i; j<n; j++){ if(i==j) continue; if(p[i][j]==1 && ban==0){ ban=1; } if(p[i][j]==2 && ban==0){ ban=2; } if(p[i][j]!=0){ fu._union(i, j); } } } for(int i=0; i<n; i++){ for(int j=i; j<n; j++){ if(p[i][j]==0){ if(fu.find(i)==fu.find(j)){ return 0; } }else{ int t = fu.find(i); conect[t].push_back(i); conect[t].push_back(j); } } } for(int i=0; i<n; i++){ for(int j=0; j<(int)conect.size()-1; j++){ ans[conect[i][j+1]][conect[i][j]]=1; ans[conect[i][j]][conect[i][j+1]]=1; } if(ban==2){ ans[conect[i][(int)conect.size()-1]][conect[i][0]]=1; ans[conect[i][0]][conect[i][(int)conect.size()-1]]=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...