Submission #771025

#TimeUsernameProblemLanguageResultExecution timeMemory
771025cadmiumskyConnecting Supertrees (IOI20_supertrees)C++17
100 / 100
175 ms27760 KiB
#include <bits/stdc++.h> #include "supertrees.h" #define all(x) (x).begin(),(x).end() using namespace std; using ll = long long; using ld = long double; //#define int ll #define sz(x) ((int)(x).size()) using pii = pair<int,int>; using tii = tuple<int,int,int>; vector<vector<int>> rez; void addedge(int a, int b) { rez[a][b] = rez[b][a] = 1; return; } int construct(std::vector<std::vector<int>> p) { int n; for(auto v : p) for(auto x : v) { if(x == 3) return 0; } n = sz(p); for(int i = 0; i < n; i++) if(p[i][i] != 1) return 0; rez.resize(n, vector<int>(n, 0)); //cerr << n << '\n'; map<vector<int>, vector<int>> group; vector<int> eligible(n, 0); for(int i = 0; i < n; i++) group[p[i]].emplace_back(i); for(auto &[a, b] : group) { //cerr << sz(b) << '\n'; for(int i = 1; i < sz(b); i++) addedge(b[0], b[i]); eligible[b[0]] = 1; } //cerr << "ok\n"; group.clear(); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { p[i][j] *= eligible[i] * eligible[j]; if(i == j) p[i][j] *= 2; if(p[i][j] == 1) return 0; } if(eligible[i]) group[p[i]].emplace_back(i); } vector<int> coloring(n); int C = 0; for(auto &[a, b] : group) { C++; for(auto x : b) coloring[x] = C; if(sz(b) == 1) continue; if(sz(b) == 2) return 0; for(int i = 0, j = 1; i < sz(b); i++, j = (j + 1) % sz(b)) { addedge(b[i], b[j]); } } for(int i = 0; i < n; i++) { if(!eligible[i]) continue; for(int j = 0; j < n; j++) { if(!eligible[j]) continue; if(p[i][j] == 2) { if(!(coloring[i] == coloring[j])) return 0; } } } build(rez); return 1; } /** Anul asta se da centroid. -- Surse oficiale */
#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...