Submission #300500

#TimeUsernameProblemLanguageResultExecution timeMemory
300500davitmargConnecting Supertrees (IOI20_supertrees)C++17
11 / 100
266 ms30072 KiB
/* DavitMarg In a honky-tonk, Down in Mexico */ #include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #include <map> #include <unordered_map> #include <set> #include <unordered_set> #include <queue> #include <iomanip> #include <bitset> #include <stack> #include <cassert> #include <iterator> #include <fstream> #define mod 1000000007ll #define LL long long #define LD long double #define MP make_pair #define PB push_back #define all(v) v.begin(), v.end() #define fastIO ios::sync_with_stdio(false); cin.tie(0) using namespace std; const int N = 1005; #ifndef death #include "supertrees.h" #endif #ifdef death void build(vector<vector<int>> b) { for (int i = 0; i < b.size(); i++) { for (int j = 0; j < b.size(); j++) cout << b[i][j] << " "; cout << endl; } } #endif int parent[N]; void init(int n) { for (int i = 1; i <= n; i++) parent[i] = i; } int par(int v) { if (v == parent[v]) return v; return parent[v] = par(parent[v]); } void dsu(int a, int b) { a = par(a); b = par(b); if (a == b) return; parent[b] = a; } int n,z; vector<vector<int>> ans,zr; vector<vector<int>> p; void add(int a, int b) { ans[a][b] = ans[b][a] = 1; } void solve(vector<int> v) { init(v.size()); for (int i = 0; i < v.size(); i++) for (int j = i + 1; j < v.size(); j++) if (p[v[i]][v[j]] == 1) dsu(i, j); for (int i = 0; i < v.size(); i++) for (int j = i + 1; j < v.size(); j++) if (p[v[i]][v[j]] == 2 && par(i) == par(j)) { z = 1; return; } map<int, vector<int>> VS; vector<int> V; for (int i = 0; i < v.size(); i++) VS[v[par(i)]].PB(v[i]); for (auto it = VS.begin(); it != VS.end(); ++it) { for (int i = 0; i < it->second.size() - 1; i++) add(it->second[i], it->second[i + 1]); V.push_back(it->first); } if(V.size()>1) for (int i = 0; i < V.size(); i++) add(V[i], V[(i + 1) % V.size()]); } int construct(vector<vector<int>> P) { p = P; n = p.size(); ans.resize(n, vector<int>(n,0)); zr.resize(n, vector<int>(n,0)); for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (p[i][j]) { dsu(i, j); if (p[i][j] == 3) { //build(zr); return 0; } } map<int, vector<int>> vs; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) if (p[i][j] == 0 && par(i) == par(j)) { //build(zr); return 0; } vs[par(i)].push_back(i); } for (auto it = vs.begin(); it != vs.end(); ++it) solve(it->second); if (z) { //build(zr); return 0; } build(ans); return 1; } #ifdef death int main() { fastIO; vector<vector<int>> P(4); P[0].PB(1);P[0].PB(1);P[0].PB(2);P[0].PB(2); P[1].PB(1);P[1].PB(1);P[1].PB(2);P[1].PB(2); P[2].PB(2);P[2].PB(2);P[2].PB(1);P[2].PB(2); P[3].PB(2);P[3].PB(2);P[3].PB(2);P[3].PB(1); cout << construct(P) << endl; return 0; } #endif /* */

Compilation message (stderr)

supertrees.cpp: In function 'void solve(std::vector<int>)':
supertrees.cpp:87:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |     for (int i = 0; i < v.size(); i++)
      |                     ~~^~~~~~~~~~
supertrees.cpp:88:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |         for (int j = i + 1; j < v.size(); j++)
      |                             ~~^~~~~~~~~~
supertrees.cpp:92:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |     for (int i = 0; i < v.size(); i++)
      |                     ~~^~~~~~~~~~
supertrees.cpp:93:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |         for (int j = i + 1; j < v.size(); j++)
      |                             ~~^~~~~~~~~~
supertrees.cpp:101:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |     for (int i = 0; i < v.size(); i++)
      |                     ~~^~~~~~~~~~
supertrees.cpp:106:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |         for (int i = 0; i < it->second.size() - 1; i++)
      |                         ~~^~~~~~~~~~~~~~~~~~~~~~~
supertrees.cpp:112:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  112 |         for (int i = 0; i < V.size(); i++)
      |                         ~~^~~~~~~~~~
#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...