제출 #1204815

#제출 시각아이디문제언어결과실행 시간메모리
1204815simona1230분수 공원 (IOI21_parks)C++20
5 / 100
3600 ms127904 KiB
#include "parks.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn=2*1e5+5;
pair<int,int> p[maxn];
map<pair<int,int>, int> mp,e,bench;
int k,used[maxn];
int in;

vector<int> v,u,a,b;

void dfs(int i,int l)
{
    //cout<<i<<endl;
    in++;
    if(i!=1)
    {
        v.push_back(l);
        u.push_back(i);
        e[{i,l}]=e[{l,i}]=1;
    }

    used[i]=1;
    pair<int,int> c;
    c=p[i];c.first+=2;
    if(mp[c]&&!used[mp[c]])dfs(mp[c],i);
    c=p[i];c.first-=2;
    if(mp[c]&&!used[mp[c]])dfs(mp[c],i);
    c=p[i];c.second+=2;
    if(mp[c]&&!used[mp[c]])dfs(mp[c],i);
    c=p[i];c.second-=2;
    if(mp[c]&&!used[mp[c]])dfs(mp[c],i);
}
int construct_roads(std::vector<int> x, std::vector<int> y)
{
    mp.clear();
    e.clear();
    v.clear();
    u.clear();
    a.clear();
    b.clear();
    memset(used,0,sizeof(used));
    in=0;

    k=x.size();
    for(int i=0;i<k;i++)
    {
        p[i+1]={x[i],y[i]};
        mp[p[i+1]]=i+1;
    }

    dfs(1,0);
    if(in!=k)return 0;

    for(int i=0;i<k-1;i++)
    {
        pair<int,int> p1=p[v[i]],p2=p[u[i]];
        if(p1.first==p2.first)
        {
            int f=p1.first;
            int g=min(p1.second,p2.second);
            b.push_back(g+1);
            if(e[{mp[{f,g}],mp[{f-2,g}]}]||e[{mp[{f,g}],mp[{f+2,g}]}])
                a.push_back(f+1);
            else a.push_back(f-1);
        }
        else
        {
            int f=min(p1.first,p2.first);
            int g=p1.second;
            a.push_back(f+1);
            if(e[{mp[{f,g}],mp[{f,g-2}]}]||e[{mp[{f,g}],mp[{f,g+2}]}])
                b.push_back(g-1);
            else b.push_back(g+1);
        }
        if(bench[{a[i],b[i]}])while(1);
        bench[{a[i],b[i]}]=1;
    }

    for(int i=0;i<k-1;i++)
        v[i]--,u[i]--;

    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...