제출 #1239485

#제출 시각아이디문제언어결과실행 시간메모리
1239485Ghulam_JunaidConnecting Supertrees (IOI20_supertrees)C++20
40 / 100
136 ms22192 KiB
#include <bits/stdc++.h> #include "supertrees.h" using namespace std; const int N = 1e3 + 10; int n, par[N][3]; vector<vector<int>> output; int root(int v, int id){ return (par[v][id] == -1 ? v : par[v][id] = root(par[v][id], id)); } void merge(int u, int v, int id){ if ((u = root(u, id)) == (v = root(v, id))) return ; par[u][id] = v; } int construct(vector<vector<int>> p) { n = p.size(); output.resize(n); for (int i = 0; i < n; i++) output[i].resize(n); for (int i = 0; i < n; i ++) for (int j = 0; j < n; j ++) if (p[i][j] == 3) return 0; for (int v = 0; v < n; v ++) par[v][0] = par[v][1] = -1; for (int i = 0; i < n; i ++){ for (int j = 0; j < n; j ++){ if (p[i][j]) merge(i, j, 0); if (p[i][j] == 1) merge(i, j, 1); } } for (int i = 0; i < n; i ++) for (int j = 0; j < n; j ++) if (p[i][j] == 0 and root(i, 0) == root(j, 0)) return 0; for (int rr = 0; rr < n; rr ++){ vector<int> comp; for (int i = 0; i < n; i ++) if (root(i, 0) == rr) comp.push_back(i); if (comp.empty()) continue; for (int i = 0; i + 1 < comp.size(); i ++) output[comp[i]][comp[i + 1]] = output[comp[i + 1]][comp[i]] = 1; bool cyc = 0; for (int u : comp) for (int v : comp) if (p[u][v] == 2) cyc = 1; if (cyc) output[comp.back()][comp[0]] = output[comp[0]][comp.back()] = 1; if (cyc and comp.size() < 3) return 0; } build(output); 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...