Submission #603697

#TimeUsernameProblemLanguageResultExecution timeMemory
603697TigryonochekkConnecting Supertrees (IOI20_supertrees)C++17
40 / 100
368 ms73032 KiB
#include <iostream> #include "supertrees.h" #include <vector> #include <set> using namespace std; const int N = 1002; vector<vector<int>> answer; set<int> dsu[N]; vector<int> ds[N]; int com[N]; void dfs(int v) { for (auto to : dsu[v]) { if (com[to]) continue; com[to] = com[v]; dfs(to); } } int construct(vector<vector<int>> p) { int n = p.size(); answer.resize(n); for (int i = 0; i < n; i++) { answer[i].resize(n); } bool flag = true; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j == i) continue; if (p[i][j]) { dsu[i].insert(j); ds[i].push_back(j); } if (p[i][j] == 2) flag = false; } } int k = 1; for (int i = 0; i < n; i++) { if (!com[i]) { com[i] = k++; dfs(i); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j == i) continue; if (com[i] == com[j] && dsu[i].find(j) == dsu[i].end()) return 0; if (com[i] != com[j] && dsu[i].find(j) != dsu[i].end()) return 0; } } if(flag) for (int i = 0; i < n; i++) { if (com[i]) { com[i] = 0; for (int j : dsu[i]) { answer[i][j] = 1; answer[j][i] = 1; com[j] = 0; } } } else { for (int i = 0; i < n; i++) { if (com[i]) { if (ds[i].size() == 1) return 0; if (ds[i].size() == 0) continue; //cout << ds[i].size() << " " << dsu[i].size() << endl; answer[i][ds[i][0]] = 1; answer[ds[i][0]][i] = 1; answer[i][ds[i].back()] = 1; answer[ds[i].back()][i] = 1; com[i] = 0; for (int j = 0; j < ds[i].size() - 1; j++) { answer[ds[i][j]][ds[i][j + 1]] = 1; answer[ds[i][j + 1]][ds[i][j]] = 1; com[ds[i][j]] = 0; } com[ds[i].back()] = 0; } } } build(answer); return 1; } /* 3 1 0 0 0 1 1 0 1 1 4 1 0 0 0 0 1 2 2 0 2 1 2 0 2 2 1 3 1 0 0 0 1 2 0 2 1 */

Compilation message (stderr)

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:75:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |     for (int j = 0; j < ds[i].size() - 1; 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...