제출 #808509

#제출 시각아이디문제언어결과실행 시간메모리
808509drdilyor슈퍼트리 잇기 (IOI20_supertrees)C++17
96 / 100
200 ms24016 KiB
#include<bits/stdc++.h> #include "supertrees.h" using namespace std; using ll = long long; const int inf = 1e9; #ifdef ONPC #define debug(args...) {cout << "[" << #args << "]: "; debug_out(args);} #else #define debug(args...) {42;} #endif void debug_out() { cout << endl; } template<typename H, typename... T> void debug_out(vector<H> h, T... t) { cout << "{"; for (H i : h) cout << i << ", "; cout << "}, "; debug_out(t...); } template<typename H, typename... T> void debug_out(H h, T... t) { cout << h << ", "; debug_out(t...); } struct DSU { int n; vector<int> par; DSU(int n) : n(n), par(n) { for (int i = 0; i < n; i++) par[i] = i; } void merge(int a, int b) { a = get(a), b = get(b); par[b] = a; } int get(int i) { return par[i] == i ? i : par[i] = get(par[i]); } }; int construct(std::vector<std::vector<int>> p) { int n = p.size(); vector ans(n, vector<int>(n)); DSU cc1(n), cc(n); for (int i = 0;i < n;i++) for (int j = 0; j < n; j++) { if (p[i][j] == 1) cc1.merge(i, j); if (p[i][j]) cc.merge(i, j); } DSU rcc(n), rcc1(n); for (int i = 0; i < n; i++) { int j = cc1.get(i); if (j == i) continue; ans[i][j] = ans[j][i] = 1; rcc1.merge(i, j); } for (int i = 0; i < n; i++) { if (cc.get(i) != i) continue; vector<int> full{i}; for (int j = 0; j < n; j++) { if (j == i) continue; if (cc.get(j) == cc.get(i)) full.push_back(cc1.get(j)); } debug(full); sort(full.begin(), full.end()); full.erase(unique(full.begin(), full.end()), full.end()); if (full.size() == 2) return 0; if (full.size() == 1) continue; int m = full.size(); for (int j = 0; j < m; j++) { ans[full[j]][full[(j + 1) % m]] = 1; ans[full[(j + 1) % m]][full[j]] = 1; } } for (int i = 0; i < n;i++) for (int j = 0; j < n; j++) if (ans[i][j]) rcc.merge(i, j); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (pair(cc.get(i) == cc.get(j), cc1.get(i) == cc1.get(j)) != pair(rcc.get(i) == rcc.get(j), rcc1.get(i) == rcc1.get(j))) return 0; if (bool(p[i][j]) != (rcc.get(i) == rcc.get(j))) return 0; } } build(ans); return 1; }

컴파일 시 표준 에러 (stderr) 메시지

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:10:25: warning: statement has no effect [-Wunused-value]
   10 | #define debug(args...) {42;}
      |                         ^~
supertrees.cpp:76:9: note: in expansion of macro 'debug'
   76 |         debug(full);
      |         ^~~~~
#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...