제출 #1370101

#제출 시각아이디문제언어결과실행 시간메모리
1370101enzy분수 공원 (IOI21_parks)C++20
0 / 100
66 ms15964 KiB
#include "parks.h"
#include<bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int maxn=2e5+10;

map<pii,int>mp;
vector<int>adj[maxn];
int marc[maxn];

void dfs(int u){
    marc[u]++;
    for(int viz : adj[u]){
        if(marc[viz]) continue;
        dfs(viz);
    }
}

int construct_roads(vector<int> x, vector<int> y){
    int n=x.size();
    for(int i=0;i<n;i++) adj[i].clear(), marc[i]=0;
    vector<pair<int,pii>>ord;
    for(int i=0;i<n;i++) ord.push_back({i,{x[i],y[i]}}), mp[{x[i],y[i]}]=i+1;
    sort(ord.begin(),ord.end());
    vector<int>u, v, a, b;
    for(int i=1;i<n;i++){
        if(ord[i-1].se.fi==ord[i].se.fi&&ord[i-1].se.se+2==ord[i].se.se){
            u.push_back(ord[i-1].fi); v.push_back(ord[i].fi);
            b.push_back((ord[i-1].se.se+ord[i].se.se)/2);
            if(ord[i].se.fi==2) a.push_back(ord[i].se.fi-1);
            else a.push_back(ord[i].se.fi+1);
        }
        if(ord[i].se.fi==2){
            if(mp[{ord[i].se.fi+2,ord[i].se.se}]){
                u.push_back(ord[i].fi); v.push_back(mp[{ord[i].se.fi+2,ord[i].se.se}]-1);
                a.push_back(ord[i].se.fi+1); b.push_back(ord[i].se.se+1);
            }
        }
    }
    for(int i=0;i<u.size();i++){
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }
    dfs(0);
    for(int i=0;i<n;i++) if(!marc[i]) return 0;
    build(u,v,a,b);
    return 1;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…