제출 #975324

#제출 시각아이디문제언어결과실행 시간메모리
975324raspy슈퍼트리 잇기 (IOI20_supertrees)C++14
100 / 100
183 ms22872 KiB
#include "supertrees.h" #include <vector> #include <iostream> using namespace std; bool obd[20005]; bool obd3[20005]; int dis[20005]; int tip[20005]; vector<int> el[20005]; int par(int x) { return dis[x] = (dis[x] == x ? x : par(dis[x])); } void zd(int x, int y, bool zlij = true) { x = par(x); y = par(y); if (x == y) return; if (el[x].size() < el[y].size()) swap(x, y); if (zlij) { if (el[x].empty()) el[x].push_back(x); if (el[y].empty()) el[y].push_back(y); for (auto e : el[y]) el[x].push_back(e); } dis[y] = x; return; } int construct(vector<vector<int>> p) { int n = p.size(); vector<vector<int>> gr(n, vector<int>(n, 0)); for (int i = 0; i <= n; i++) dis[i] = i; for (int i = 0; i < n; i++) for (int j = i+1; j < n; j++) { if (p[i][j] == 1 && par(i)-par(j)) { gr[par(i)][par(j)] = gr[par(j)][par(i)] = 1; zd(i, j, 0); } } int dalje2 = 0; for (int i = 0; i < n; i++) for (int j = i+1; j < n; j++) { if (p[i][j] == 2 && par(i)-par(j)) { tip[i] = tip[j] = 2; dalje2 = 1; zd(i, j); } } if (dalje2) { for (int i = 0; i < n; i++) { int x = par(i); if (obd[x] || tip[x] != 2) continue; obd[x] = 1; vector<int> tr = el[x]; if (tr.size() <= 2) return 0; tr.push_back(x); int pr = -1; for (auto v : tr) { if (pr+1) gr[v][pr] = gr[pr][v] = 1; pr = v; } } } int dalje3 = 0; for (int i = 0; i < n; i++) for (int j = i+1; j < n; j++) { if (p[i][j] == 3) { if (tip[i] == 2 || tip[j] == 2) return 0; // cout << i << " " << j << " " << tip[i] << " " << tip[j] << "\n"; tip[i] = tip[j] = 3; dalje3 = 1; zd(i, j); } } if (dalje3) return 0; for (int i = 0; i < n; i++) for (int j = i+1; j < n; j++) { if (p[i][j] == 0 && par(i) == par(j)) return 0; if (p[i][j] && par(i) != par(j)) return 0; if (p[i][j] && tip[i] && tip[j] && tip[i] != tip[j]) return 0; } build(gr); 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...