Submission #1255367

#TimeUsernameProblemLanguageResultExecution timeMemory
1255367ereringFountain Parks (IOI21_parks)C++20
45 / 100
675 ms78932 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;
    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]);
    }
    map<pair<int,int>,bool> taken;
   for(auto i:st){
       for(auto j:vec[i]){
           int X=i,Y=j;
           if(exist[{X,Y-2}]){
               u.pb(exist[{X,Y-2}]);
               v.pb({exist[{X,Y}]});
               b.pb(Y-1);
               if((X/2+Y/2)%2)a.pb(X-1);
               else a.pb(X+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+2,Y}];
        if(k){
            if(!taken[{X+1,Y-1}]){
                u.pb(k);
                v.pb(i+1);
                b.pb(Y-1);
                taken[{X+1,Y-1}]=1;
                a.pb(X+1);
            }
            else if(!taken[{X+1,Y+1}]){
                u.pb(k);
                v.pb(i+1);
                b.pb(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...