제출 #1237118

#제출 시각아이디문제언어결과실행 시간메모리
1237118Ghulam_JunaidSplit the Attractions (IOI19_split)C++17
18 / 100
52 ms17864 KiB
#include <bits/stdc++.h>
#include "split.h"
// #include "grader.cpp"
using namespace std;

const int N = 2e5 + 10;
int n, m, a, b, c;
vector<int> g[N], seen, vis;

void dfs(int v, int target, int day){
    seen.push_back(v);
    vis[v] = day;
    for (int u : g[v]){
        if (vis[u])
            continue;
        if (seen.size() < target)
            dfs(u, target, day);
    }
}

vector<int> find_split(int nn, int aa, int bb, int cc, vector<int> p, vector<int> q) {
	n = nn, a = aa, b = bb, c = cc, m = p.size();
    for (int i = 0; i < m; i ++){
        g[p[i]].push_back(q[i]);
        g[q[i]].push_back(p[i]);
    }
    vis.resize(n, 0);

    int v = 0;
    for (int i = 1; i < n; i ++)
        if (g[v].size() > g[i].size())
            v = i;

    dfs(v, a, 1);

    bool done = 0;
    for (int i = 0; i < n and !done; i ++){
        if (vis[i]) continue;
        
        seen.clear();
        dfs(i, b, 2);

        if (seen.size() == b)
            done = 1;
        else{
            for (int x : seen)
                vis[x] = 3;
        }
    }
    for (int i = 0; i < n; i ++)
        if (!vis[i])
            dfs(i, c, 3);

	return vis;
}
#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...