Submission #1255332

#TimeUsernameProblemLanguageResultExecution timeMemory
1255332ereringFountain Parks (IOI21_parks)C++20
15 / 100
508 ms73240 KiB
#include <bits/stdc++.h>
#include "parks.h"
using namespace std;
#define pb push_back
const int MAXN=2e5+5;
vector<int> adj[MAXN],vec[MAXN],u,v,a,b;
bool vis[MAXN];
void dfs(int node){
    if(vis[node])return;
    vis[node]=1;
    for(auto i:adj[node])dfs(i);
}
int construct_roads(std::vector<int> x, std::vector<int> y) {
    if (x.size() == 1) {
	build({}, {}, {}, {});
        return 1;
    }
    map<pair<int,int>,int> exist;
    vector<int> uniq;
    set<int> st;
    for(int i=0;i<x.size();i++){
        exist[{x[i],y[i]}]=i+1;
        vec[x[i]].pb(y[i]);
        st.insert(x[i]);
    }
    for(auto i:st)uniq.pb(i);
    sort(uniq.begin(),uniq.end());
    map<pair<int,int>,bool> taken;
    for(int i=1;i<uniq.size();i++){
        for(auto j:vec[uniq[i]]){
            int X=uniq[i],Y=j;
            int k=exist[{X-2,Y}];
            if(k){
                u.pb(k);
                v.pb({exist[{X,Y}]});
                a.pb(X-1);
                if(i%2)b.pb(Y+1);
                else b.pb(Y-1);
                taken[{a.back(),b.back()}]=1;
            }
        }
    }
    for(int i=0;i<x.size();i++){
        int X=x[i],Y=y[i];
        int k=exist[{X,Y-2}];
        if(k){
            u.pb(k);
            v.pb(i+1);
            b.pb(Y-1);
            if(!taken[{X-1,Y-1}]){
                taken[{X-1,Y-1}]=1;
                a.pb(X-1);
            }
            else if(!taken[{X+1,Y-1}]){
                taken[{X+1,Y-1}]=1;
                a.pb(X+1);
            }
        }
    }
    for(int i=0;i<v.size();i++){
        u[i]--;
        v[i]--;
        adj[u[i]].pb(v[i]); adj[v[i]].pb(u[i]);
    }
    dfs(0);
    for(int i=0;i<x.size();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...