제출 #800079

#제출 시각아이디문제언어결과실행 시간메모리
800079PixelCat슈퍼트리 잇기 (IOI20_supertrees)C++14
21 / 100
161 ms24144 KiB
#include "supertrees.h" #ifdef NYAOWO #include "grader.cpp" #endif #include <bits/stdc++.h> #define For(i, a, b) for(int i = a; i <= b; i++) #define Forr(i, a, b) for(int i = a; i >= b; i--) #define F first #define S second #define all(x) x.begin(), x.end() #define sz(x) ((int)x.size()) #define eb emplace_back // #define int LL using namespace std; using LL = long long; using pii = pair<int, int>; const int MAXN = 1000; vector<vector<int>> answer; inline void add_edge(int a, int b) { answer[a][b] = answer[b][a] = 1; } struct DSU { int p[MAXN + 10]; void init() { memset(p, -1, sizeof(p)); } int find(int n) { if(p[n] < 0) return n; return p[n] = find(p[n]); } bool uni(int a, int b) { a = find(a); b = find(b); if(a == b) return false; p[b] = a; return true; } bool same(int a, int b) { return find(a) == find(b); } bool lead(int n) { return p[n] < 0; } } dsu; int construct(vector<vector<int>> p) { int n = sz(p); For(i, 0, n - 1) For(j, 0, n - 1) if(p[i][j] == 3) return 0; answer = vector<vector<int>>(n, vector<int>(n, 0)); // phase 1: find all CC dsu.init(); For(i, 0, n - 1) For(j, 0, n - 1) { if(p[i][j]) dsu.uni(i, j); } vector<vector<int>> vcc; For(i, 0, n - 1) if(dsu.lead(i)) { vcc.eb(); For(j, 0, n - 1) if(dsu.same(i, j)) { vcc.back().eb(j); } } // phase 2: solve for each CC for(vector<int> &cc:vcc) { int mask = 0; for(auto &v1:cc) for(auto &v2:cc) { mask |= (1 << p[v1][v2]); } if(mask & 1) return 0; if(mask == 2) { int rt = cc.back(); cc.pop_back(); for(auto &i:cc) { add_edge(i, rt); } } else if(mask == 4) { For(i, 1, sz(cc) - 1) { add_edge(cc[i], cc[i - 1]); } add_edge(cc.front(), cc.back()); } } 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...