Submission #1022424

#TimeUsernameProblemLanguageResultExecution timeMemory
1022424mdn2002Fountain Parks (IOI21_parks)C++17
0 / 100
1 ms348 KiB
/* Mayoeba Yabureru */ #include "parks.h" #include<bits/stdc++.h> using namespace std; static vector<int> _u, _v, _a, _b; int construct_roads(vector<int> x, vector<int> y) { int n = x.size(); vector<vector<int>> gr(n + 1); vector<int> dsu(n + 1); map<pair<int, int>, int> mp; map<pair<int, int>, pair<int, int>> mpp; vector<pair<int, int>> vv; x.insert(x.begin(), 0); y.insert(y.begin(), 0); for (int i = 1; i <= n; i ++) { mp[{x[i], y[i]}] = i; vv.push_back({x[i], y[i]}); dsu[i] = i; } vector<int> u, v, a, b; map<pair<int, int>, int> taken; function<int(int)> fp = [&](int x) { if (dsu[x] == x) return x; return dsu[x] = fp(dsu[x]); }; function cmp = [&] (pair<int, int> a, pair<int, int> b) { if (a.first + a.second < b.first + b.second) return 1; return 0; }; sort(vv.begin(), vv.end(), cmp); for (int i = 0; i < n; i ++) { auto xx = make_pair(vv[i].first, vv[i].second - 2); int fx = fp(mp[vv[i]]), fy = fp(mp[xx]); if (mp[xx] && fx != fy) { int ad = (vv[i].first + vv[i].second) % 4; if (taken[{vv[i].first - 1 + ad, vv[i].second + 1}] == 0) { mpp[{mp[vv[i]], mp[xx]}] = {vv[i].first - 1 + ad, vv[i].second + 1}; taken[{vv[i].first - 1 + ad, vv[i].second + 1}] = 1; u.push_back(mp[vv[i]]); v.push_back(mp[xx]); gr[mp[vv[i]]].push_back(mp[xx]); gr[mp[xx]].push_back(mp[vv[i]]); dsu[fx] = fy; } } xx = make_pair(vv[i].first - 2, vv[i].second); fx = fp(mp[vv[i]]), fy = fp(mp[xx]); if (mp[xx] && fx != fy) { int ad = (vv[i].first + vv[i].second) % 4; if (taken[{vv[i].first + 1, vv[i].second + 1 - ad}] == 0) { mpp[{mp[vv[i]], mp[xx]}] = {vv[i].first + 1, vv[i].second + 1 - ad}; taken[{vv[i].first + 1, vv[i].second + 1 - ad}] = 1; u.push_back(mp[vv[i]]); v.push_back(mp[xx]); gr[mp[vv[i]]].push_back(mp[xx]); gr[mp[xx]].push_back(mp[vv[i]]); dsu[fx] = fy; } } } int num = 0, st = 1; vector<int> vis(n + 1); function<void(int)> go = [&] (int v) { num ++; vis[v] = 1; for (auto u : gr[v]) { if (vis[u] == 0) go(u); } }; go(st); for (int i = 0; i < u.size(); i ++) { a.push_back(mpp[{u[i], v[i]}].first); b.push_back(mpp[{u[i], v[i]}].second); u[i] --; v[i] --; } if (num == n) { build(u, v, a, b); return 1; } return 0; }

Compilation message (stderr)

parks.cpp: In function 'int construct_roads(std::vector<int>, std::vector<int>)':
parks.cpp:78:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     for (int i = 0; i < u.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...