Submission #1188655

#TimeUsernameProblemLanguageResultExecution timeMemory
1188655yellowtoadFountain Parks (IOI21_parks)C++20
100 / 100
459 ms76448 KiB
#include "parks.h" #include <iostream> #include <map> #include <algorithm> #define f first #define s second using namespace std; int n, vis[200010]; vector<pair<int,int>> pt; map<pair<int,int>,int> mp, hv; vector<int> edge[200010]; void dfs(int u) { vis[u] = 1; for (int i = 0; i < edge[u].size(); i++) if (!vis[edge[u][i]]) dfs(edge[u][i]); } int construct_roads(std::vector<int> x, std::vector<int> y) { n = x.size(); for (int i = 0; i < n; i++) pt.push_back({x[i],y[i]}), mp[{x[i],y[i]}] = i+1; sort(pt.begin(),pt.end()); vector<int> u, v, a, b; for (int i = 0; i < n; i++) { if (mp[{pt[i].f,pt[i].s-2}]) { if ((pt[i].f+pt[i].s)%4 == 0) { hv[{pt[i].f,pt[i].s}] = 1; u.push_back(mp[{pt[i].f,pt[i].s-2}]-1); v.push_back(mp[{pt[i].f,pt[i].s}]-1); a.push_back(pt[i].f+1); b.push_back(pt[i].s-1); edge[mp[{pt[i].f,pt[i].s-2}]].push_back(mp[{pt[i].f,pt[i].s}]); edge[mp[{pt[i].f,pt[i].s}]].push_back(mp[{pt[i].f,pt[i].s-2}]); } else if (hv[{pt[i].f-2,pt[i].s}] == 0) { u.push_back(mp[{pt[i].f,pt[i].s-2}]-1); v.push_back(mp[{pt[i].f,pt[i].s}]-1); a.push_back(pt[i].f-1); b.push_back(pt[i].s-1); edge[mp[{pt[i].f,pt[i].s-2}]].push_back(mp[{pt[i].f,pt[i].s}]); edge[mp[{pt[i].f,pt[i].s}]].push_back(mp[{pt[i].f,pt[i].s-2}]); } } if (mp[{pt[i].f-2,pt[i].s}]) { if ((pt[i].f+pt[i].s)%4 == 2) { hv[{pt[i].f,pt[i].s}] = 1; u.push_back(mp[{pt[i].f-2,pt[i].s}]-1); v.push_back(mp[{pt[i].f,pt[i].s}]-1); a.push_back(pt[i].f-1); b.push_back(pt[i].s+1); edge[mp[{pt[i].f-2,pt[i].s}]].push_back(mp[{pt[i].f,pt[i].s}]); edge[mp[{pt[i].f,pt[i].s}]].push_back(mp[{pt[i].f-2,pt[i].s}]); } else if (hv[{pt[i].f,pt[i].s-2}] == 0) { u.push_back(mp[{pt[i].f-2,pt[i].s}]-1); v.push_back(mp[{pt[i].f,pt[i].s}]-1); a.push_back(pt[i].f-1); b.push_back(pt[i].s-1); edge[mp[{pt[i].f-2,pt[i].s}]].push_back(mp[{pt[i].f,pt[i].s}]); edge[mp[{pt[i].f,pt[i].s}]].push_back(mp[{pt[i].f-2,pt[i].s}]); } } } dfs(1); for (int i = 1; i <= n; i++) if (!vis[i]) return 0; 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...