Submission #1204126

#TimeUsernameProblemLanguageResultExecution timeMemory
1204126simona1230Fountain Parks (IOI21_parks)C++20
0 / 100
0 ms324 KiB
#include "parks.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn=5*1e5+5;

struct fount
{
    int x,y,i;
    fount(){}
    fount(int _x,int _y,int _i)
    {
        x=_x;
        y=_y;
        i=_i;
    }
};

bool cmp(fount f1,fount f2)
{
    return f1.y<f2.y;
}

int c;
fount p[maxn];
map<pair<int,int>,int> mp;
vector<int> u,v,a,b;
int used[maxn];
void dfs(int i,int pr)
{
    if(pr!=-1)
    {
        v.push_back(i-1);
        u.push_back(pr-1);

    }
    int cnt=0;
    used[i]=1;

    pair<int,int> h={p[i].x,p[i].y};
    h.first+=2;

    if(mp[h]&&!used[mp[h]])
    {
        cnt++;
        dfs(mp[h],i);
    }

    h.first-=4;
    if(mp[h]&&!used[mp[h]])
    {
        cnt++;
        dfs(mp[h],i);
    }
    h.first+=2;

    h.second+=2;
    if(mp[h]&&!used[mp[h]])
    {
        cnt++;
        dfs(mp[h],i);
    }
    h.second-=4;
    if(mp[h]&&!used[mp[h]])
    {
        cnt++;
        dfs(mp[h],i);
    }


}

int construct_roads(std::vector<int> x, std::vector<int> y)
{
    c=x.size();
    u.resize(c-1);
    v.resize(c-1);
    a.resize(c-1);
    b.resize(c-1);
    for(int i=0;i<x.size();i++)
    {
        p[i+1]={x[i],y[i],i};
        mp[{x[i],y[i]}]=i+1;
    }

    dfs(1,-1);

    sort(p,p+c,cmp);
    for(int i=1;i<c;i++)
    {
        if(p[i-1].y+2!=p[i].y)return 0;
        a[i-1]=3;
        b[i-1]=p[i-1].y+1;
    }
    build(v,u,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...