제출 #779134

#제출 시각아이디문제언어결과실행 시간메모리
779134JosiaConnecting Supertrees (IOI20_supertrees)C++17
11 / 100
153 ms22028 KiB
#include "supertrees.h" #include <vector> #include <bits/stdc++.h> using namespace std; struct uf { vector<int> chefs; uf (int n) { chefs.resize(n); for (int i = 0; i<n; i++) chefs[i] = i; } int find(int x) { if (chefs[x] == x) return x; return chefs[x] = find(chefs[x]); } void unite(int a, int b) { a = find(a); b = find(b); chefs[a] = b; } }; int construct(std::vector<std::vector<int>> p) { int n = p.size(); if (n == 1) { if (p[0][0] == 1) { build({{0}}); return 1; } return 0; } vector<vector<int>> answer(n, vector<int>(n)); uf u(n); for (int i = 0; i<n; i++) { for (int j = 0; j<n; j++) { if (p[i][j]) u.unite(i, j); } } for (int i = 0; i<n; i++) { for (int j = 0; j<n; j++) { if (p[i][j] != (u.find(i) == u.find(j))) return -1; } } vector<vector<int>> vals(n); for (int i = 0; i<n; i++) { for (int j = 0; j<n; j++) { if (u.find(j) == i) vals[i].push_back(j); } } for (auto v: vals) { for (int i = 0; i<(int)(v.size())-1; i++) { answer[v[i]][v[i+1]] = 1; answer[v[i+1]][v[i]] = 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...