Submission #1295880

#TimeUsernameProblemLanguageResultExecution timeMemory
1295880kawhietConnecting Supertrees (IOI20_supertrees)C++20
11 / 100
120 ms26420 KiB
#include <bits/stdc++.h> #include "supertrees.h" using namespace std; vector<int> cur; map<int, int> m; void dfs(int u, vector<vector<int>> &g, vector<bool> &vis) { cur.push_back(m[u]); vis[m[u]] = 1; for (auto v : g[m[u]]) { if (!vis[m[v]]) { dfs(m[v], g, vis); } } } // void dfs(int r, int u, vector<vector<int>> &g, vector<vector<int>> &cnt) { // for (auto v : g[u]) { // } // } int construct(vector<vector<int>> p) { int n = p.size(); vector<vector<int>> twos(n), ones(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (p[i][j] == 2) { twos[i].push_back(j); } else if (p[i][j] == 1) { ones[i].push_back(j); } else { return 0; } } } for (int i = 0; i < n; i++) { m[i] = i; } vector<bool> vis1(n), vis2(n); vector<vector<int>> a, b; for (int i = 0; i < n; i++) { if (!vis1[i]) { cur.clear(); dfs(i, ones, vis1); a.push_back(cur); } } vector<vector<int>> ans(n, vector<int>(n)); for (auto k : a) { for (int i = 1; i < k.size(); i++) { m[k[i]] = k[0]; ans[k[i]][k[i - 1]] = 1; ans[k[i - 1]][k[i]] = 1; } } for (int i = 0; i < n; i++) { if (!vis2[m[i]]) { cur.clear(); dfs(m[i], twos, vis2); b.push_back(cur); } } for (auto k : b) { if (k.size() == 1) { continue; } if (k.size() == 2) { return 0; } for (int i = 1; i < k.size(); i++) { int u = m[k[i]], v = m[k[i - 1]]; ans[u][v] = ans[v][u] = 1; } int u = m[k.back()], v = m[k[0]]; ans[u][v] = ans[v][u] = 1; } for (auto k : a) { for (auto x : k) { for (auto y : k) { if (p[x][y] == 0) { return 0; } } } } for (auto k : b) { for (auto x : k) { for (auto y : k) { if (p[x][y] == 0) { return 0; } } } } // vector<vector<int>> g(n); // for (int i = 0; i < n; i++) { // for (int j = 0; j < n; j++) { // if (ans[i][j] == 1) { // g[i].push_back(j); // } // } // } // vector<vector<int>> cnt(n, vector<int>(n)); // if (cnt != p) { // return 0; // } else { build(ans); 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...