Submission #1198759

#TimeUsernameProblemLanguageResultExecution timeMemory
1198759abczzFountain Parks (IOI21_parks)C++17
55 / 100
593 ms84728 KiB
#include "parks.h" #include <iostream> #include <map> #include <array> #define ll long long using namespace std; map <array<ll, 2>, ll> mp; map <array<ll, 2>, array<ll, 2>> mp2; vector <ll> adj[200000]; bool visited[200000]; ll dj[4][2] = {0, 2, 0, -2, 2, 0, -2, 0}, X[200000], Y[200000]; void dfs(ll u, ll dir) { visited[u] = 1; for (auto v : adj[u]) { if (visited[v]) continue; ll a = (X[u]+X[v])/2+(Y[v]-Y[u])/2 * dir; ll b = (Y[u]+Y[v])/2+(X[u]-X[v])/2 * dir; if (!mp2.count({a, b})) { mp2[{a, b}] = {u, v}; dfs(v, -dir); } } } int construct_roads(std::vector<int> x, std::vector<int> y) { mp.clear(); mp2.clear(); for (int i=0; i<x.size(); ++i) { X[i] = x[i], Y[i] = y[i]; visited[i] = 0; adj[i].clear(); mp[{x[i], y[i]}] = i; } for (int i=0; i<x.size(); ++i) { for (int j=0; j<4; ++j) { ll nx = x[i] + dj[j][0], ny = y[i] + dj[j][1]; if (mp.count({nx, ny})) { ll a = mp[{x[i], y[i]}]; ll b = mp[{nx, ny}]; adj[a].push_back(b); adj[b].push_back(a); } } } dfs(0, 1); vector <int> U, V, A, B; if (mp2.size() != (ll)x.size()-1) return 0; else { auto it = mp2.begin(); while (it != mp2.end()) { U.push_back(it->second[0]); V.push_back(it->second[1]); A.push_back(it->first[0]); B.push_back(it->first[1]); it = next(it); } build(U, V, A, B); return 1; } }
#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...