제출 #782345

#제출 시각아이디문제언어결과실행 시간메모리
782345teokakabadze슈퍼트리 잇기 (IOI20_supertrees)C++17
65 / 100
191 ms26004 KiB
#include "supertrees.h" #include<bits/stdc++.h> using namespace std; int a[1005][1005], i, j, f[1005], a2, a3, k, l, cnt, c; vector<int> s; int construct(std::vector<std::vector<int>> p) { int n = p.size(); std::vector<std::vector<int>> answer; for(i = 0; i < n; i++) { a2 = a3 = 0; for(j = 0; j < n; j++) { if(p[i][j] == 2) a2 = 1; if(p[i][j] == 3) a3 = 1; } if(a2 && a3) return 0; //cout << i << "A\n"; if(!f[i]) { a2 = a3 = 0; for(j = 0; j < n; j++) { if(p[i][j] == 2) a2 = 1; if(p[i][j] == 3) a3 = 1; } if(a2 && a3) return 0; if(a2) k = 2; else if(a3) k = 3; else k = 1; f[i] = 1, l = i, cnt = 0; for(int b = 0; b < n; b++) { if(i != b && !f[b] && p[i][b] == 1) f[b] = 1, a[i][b] = a[b][i] = 1; if(f[b] == 2 && p[i][b]) return 0; } for(j = 0; j < n; j++) if(!f[j] && p[l][j] == k) { f[j] = 1; a[l][j] = a[j][l] = 1; for(int b = 0; b < n; b++) { if(j != b && !f[b] && p[j][b] == 1) f[b] = 1, a[j][b] = a[b][j] = 1; if(f[b] == 2 && p[j][b]) return 0; } l = j; cnt++; if(cnt == 2) c = j; } if(k == 2 && cnt < 2) return 0; if(k == 2) a[l][i] = a[i][l] = 1; if(k == 3 && cnt < 3) return 0; if(k == 3) a[l][i] = a[i][l] = a[i][c] = a[c][i] = 1; for(j = 0; j < n; j++) if(f[j] == 1) f[j] = 2; } } for(i = 0; i < n; i++) { for(j = 0; j < n; j++) s.push_back(a[i][j]); answer.push_back(s); s.clear(); } 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...