Submission #418839

#TimeUsernameProblemLanguageResultExecution timeMemory
418839qwerasdfzxclConnecting Supertrees (IOI20_supertrees)C++14
100 / 100
272 ms24004 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; int col[1010]; bool visited[1010]; int construct(vector<vector<int>> p) { int n = p.size(); vector<vector<int>> answer, C; answer.resize(n); for (int i=0;i<n;i++) answer[i].resize(n, 0); bool valid0 = 1; for (int i=0;i<n;i++){ for (int j=0;j<n;j++) if (p[i][j]==3) valid0 = 0; } if (!valid0) return 0; for (int i=0;i<n;i++) if (!visited[i]){ visited[i] = 1; vector<int> tmp; C.push_back(tmp); C.back().push_back(i); col[i] = C.size(); for (int j=0;j<n;j++) if (!visited[j] && p[i][j]){ C.back().push_back(j); col[j] = C.size(); visited[j] = 1; } } bool valid1 = 1; for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ if (i==j) valid1 &= (p[i][j]==1); else if (col[i]==col[j]) valid1 &= (p[i][j]>0); else valid1 &= (p[i][j]==0); } } if (!valid1) return 0; for (auto &V:C){ vector<vector<int>> C1; vector<int> col1(1010, 0); fill(visited, visited+1010, 0); for (auto &x:V) if (!visited[x]){ visited[x] = 1; vector<int> tmp; C1.push_back(tmp); C1.back().push_back(x); col1[x] = C1.size(); for (int j=0;j<n;j++) if (col[j]==col[x] && !visited[j] && p[x][j]==1){ C1.back().push_back(j); visited[j] = 1; col1[j] = C1.size(); } } bool valid2 = 1; for (auto &x:V){ for (auto &y:V){ if (col1[x]==col1[y]) valid2 &= (p[x][y]==1); else valid2 &= (p[x][y]==2); } } if (!valid2) return 0; if ((int)C1.size()==2) return 0; for (int i=0;i<(int)C1.size()-1;i++){ answer[C1[i][0]][C1[i+1][0]] = 1; answer[C1[i+1][0]][C1[i][0]] = 1; } if ((int)C1.size()>1){ answer[C1.back()[0]][C1[0][0]] = 1; answer[C1[0][0]][C1.back()[0]] = 1; } for (auto &U:C1){ for (int i=1;i<(int)U.size();i++){ answer[U[0]][U[i]] = 1; answer[U[i]][U[0]] = 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...