Submission #838567

#TimeUsernameProblemLanguageResultExecution timeMemory
838567SoulKnightConnecting Supertrees (IOI20_supertrees)C++17
21 / 100
169 ms24064 KiB
#include "supertrees.h" #include <vector> #include <iostream> #include <algorithm> #include <map> #include <numeric> using namespace std; #define ll long long #define ln '\n' const int N = 1000 + 5; int par[N]; int find(int u){return ((u == par[u])? u: par[u]=find(par[u]));} map<int, vector<int>> mp; int construct(std::vector<std::vector<int>> p) { int n = p.size(); std::vector<std::vector<int>> answer; for (int i = 0; i < n; i++) { std::vector<int> row; row.resize(n); answer.push_back(row); } iota(par, par+n, 0); for (int i = 0; i < n; i++){ for (int j = i+1; j < n; j++){ if (p[i][j]) par[find(i)] = find(j); } } for (int i = 0; i < n; i++){ for (int j = i+1; j < n; j++){ if (!p[i][j] && find(i) == find(j)) return 0; } } for (int i = 0; i < n; i++){ mp[find(i)].push_back(i); } for (auto& [p, v]: mp){ for (auto& u: v){ if (u != p) answer[u][p] = answer[p][u] = 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...