Submission #837878

#TimeUsernameProblemLanguageResultExecution timeMemory
837878mathematikConnecting Supertrees (IOI20_supertrees)C++17
0 / 100
1 ms212 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; struct setunion{ int N; vector<int> p, s; setunion(int n) { N = n; p = vector<int>(N, -1); s = vector<int>(N, 1); } int root(int n) { int i = n; while (p[i] != -1) i = p[i]; return i; } void combine(int a, int b) { int ra = root(a), rb = root(b); if (ra == rb) return; if (s[ra] < s[rb]) swap(ra, rb); s[ra] += s[rb]; p[rb] = ra; } vector<vector<int>> extract() { vector<vector<int>> erg(N), rem; for (int i = 0; i < N; i++) { erg[root(i)].push_back(i); } for (vector<int> e: erg) if (e.size()) rem.push_back(e); return rem; } }; int construct(vector<vector<int>> p) { int N = p.size(); int c = 0, o = 0; setunion zsm(N); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (p[i][j] == 3) return 0; if (p[i][j]) zsm.combine(i, j); if (p[i][j] || i == j) o++; if (p[i][j] || i == j) c++; } } vector<vector<int>> graph = vector<vector<int>>(N, vector<int>(N)); for (vector<int> z: zsm.extract()) { c -= z.size() * z.size(); setunion one(z.size()); for (int i = 0; i < z.size(); ++i) { cout << " " << z[i] << " "; for (int j = 0; j < z.size(); ++j) { if (p[i][j] == 1) one.combine(i, j); } } cout << endl; vector<vector<int>> g = one.extract(); for (int i = 0; i < g.size(); i++) { graph[z[g[i][0]]][z[g[(i + 1) % g.size()][0]]] = true; graph[z[g[(i + 1) % g.size()][0]]][z[g[i][0]]] = true; } for (int i = 0; i < g.size(); i++) { o -= g[i].size() * g[i].size(); for (int j = 1; j < g[i].size(); j++) { graph[z[g[i][0]]][z[g[i][j]]] = true; } } } for (int i = 0; i < N; i++) p[i][i] = false; if (c || o) return 0; build(graph); return 1; }

Compilation message (stderr)

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:69:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |   for (int i = 0; i < z.size(); ++i)
      |                   ~~^~~~~~~~~~
supertrees.cpp:72:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |    for (int j = 0; j < z.size(); ++j)
      |                    ~~^~~~~~~~~~
supertrees.cpp:82:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |   for (int i = 0; i < g.size(); i++)
      |                   ~~^~~~~~~~~~
supertrees.cpp:88:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |   for (int i = 0; i < g.size(); i++)
      |                   ~~^~~~~~~~~~
supertrees.cpp:91:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |    for (int j = 1; j < g[i].size(); j++)
      |                    ~~^~~~~~~~~~~~~
#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...