제출 #1229355

#제출 시각아이디문제언어결과실행 시간메모리
1229355GraySplit the Attractions (IOI19_split)C++20
7 / 100
41 ms13896 KiB
#include "split.h"
#include<bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define ln "\n"
using namespace std;

vector<vector<int>> A;
ll n;

void dfs(ll u, ll &cnt, ll wr, vector<int> &val){
    val[u]=wr; cnt--;
    if (cnt==0) return;
    for (auto v:A[u]){
        if (val[v]) continue;
        dfs(v, cnt, wr, val);
        if (cnt==0) return;
    }
}

vector<int> find_split(int N, int ca, int cb, int cc, vector<int> p, vector<int> q) {
    A.clear();
    n=N; A.resize(n);
    for (ll i=0; i<(ll)p.size(); i++){
        A[p[i]].push_back(q[i]);
        A[q[i]].push_back(p[i]);
    }
    vector<ll> ends;
    for (ll i=0; i<n; i++){
        if (A[i].size()==1) ends.push_back(i);
    }
    if(ends.empty()){
        vector<int> res(n);
        ll a=ca; dfs(0, a, 1, res);
        ll b=cb; for (ll i=0; i<n; i++){
            if (res[i]==0){
                dfs(i, b, 2, res);
                break;
            }
        }
        for (ll i=0; i<n; i++) if (res[i]==0) res[i]=3;
        return res;
    }else{
        vector<int> res(n);
        ll a=ca; dfs(ends[0], a, 1, res);
        ll b=cb; dfs(ends[1], b, 2, res);
        for (ll i=0; i<n; i++) if (res[i]==0) res[i]=3;
        return res;
    }
}
#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...