제출 #1214000

#제출 시각아이디문제언어결과실행 시간메모리
1214000edga1슈퍼트리 잇기 (IOI20_supertrees)C++20
11 / 100
113 ms22108 KiB
#include <bits/stdc++.h> #include "supertrees.h" using namespace std; typedef long long ll; #define fi first #define se second #define pb push_back #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define MOD 1000000007 int construct(vector<vector<int>> p) { int n = p.size(); vector<vector<int>> answer(n,vector<int>(n)); 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]!=p[j][i]) return 0; } } vector<int> s(n,0); for(int i=0; i<n; i++){ if(s[i]) continue; vector<int> cur; for(int j=0; j<n; j++){ if(p[i][j]>0){ if(s[j]) return 0; s[j]=1; cur.pb(j); } } for(auto f1 : cur){ int c=0; for(int f2=0; f2<n; f2++){ if(p[f1][f2]>0) c++; } if(c!=cur.size()) return 0; } int curn=cur.size(); vector<int> curs(curn,0); vector<int> b; for(auto v : cur){ if(curs[v]) continue; vector<int> cur2; for(auto j : cur){ if(p[v][j]==1){ if(curs[j]) return 0; curs[j]=1; cur2.pb(j); } } for(auto f1 : cur2){ int c=0; for(auto f2 : cur){ if(p[f1][f2]==1) c++; } if(c!=cur2.size()) return 0; } b.pb(v); for(int j=0; j<cur2.size()-1; j++){ answer[cur2[j]][cur2[j+1]]=answer[cur2[j+1]][cur2[j]]=1; } } if(b.size()==1) continue; if(b.size()==2) return 0; b.pb(b[0]); for(int j=0; j<b.size()-1; j++){ answer[b[j]][b[j+1]]=answer[b[j+1]][b[j]]=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...