Submission #1022400

#TimeUsernameProblemLanguageResultExecution timeMemory
1022400mdn2002Fountain Parks (IOI21_parks)C++17
5 / 100
1116 ms126800 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; map<pair<int, int>, int> connected; function<int(int)> fp = [&](int x) { if (dsu[x] == x) return x; return dsu[x] = fp(dsu[x]); }; sort(vv.begin(), vv.end()); for (int i = 0; i < n; i ++) { auto xx = make_pair(vv[i].first, vv[i].second + 2); if (mp[xx]) { int fx = fp(mp[vv[i]]), fy = fp(mp[xx]); if (fx != fy) { 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; connected[{mp[vv[i]], mp[xx]}] = 1; connected[{mp[xx], mp[vv[i]]}] = 1; int ad = vv[i].second % 4; 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; } } } for (int i = 0; i < n; i ++) { auto xx = make_pair(vv[i].first + 2, vv[i].second); if (mp[xx]) { int fx = fp(mp[vv[i]]), fy = fp(mp[xx]); if (fx != fy) { 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; connected[{mp[vv[i]], mp[xx]}] = 1; connected[{mp[xx], mp[vv[i]]}] = 1; if (taken[{vv[i].first + 1, vv[i].second + 1}] == 0) { mpp[{mp[vv[i]], mp[xx]}] = {vv[i].first + 1, vv[i].second + 1}; taken[{vv[i].first + 1, vv[i].second + 1}] = 1; } else if (taken[{vv[i].first + 1, vv[i].second - 1}] == 0) { mpp[{mp[vv[i]], mp[xx]}] = {vv[i].first + 1, vv[i].second - 1}; taken[{vv[i].first + 1, vv[i].second - 1}] = 1; } else assert(0); } } } 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:89:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |     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...