이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "split.h"
#include "bits/stdc++.h"
using namespace std;
#define pb push_back
#define f first
#define s second
const int N = 1e5 + 10;
int was[N], sz[N], ans[N], cnt;
vector<int> g[N], tr[N];
void build_dfs(int u){
was[u] = 1;
for(auto v : g[u])
if(was[v] == 0){
tr[u].pb(v), tr[v].pb(u);
build_dfs(v);
}
}
void paint(int u, int pr, int c){
if(cnt <= 0 || ans[u] != 0)
return;
ans[u] = c;
--cnt;
for(auto v : tr[u])
if(v != pr && ans[v] == 0)
paint(v, u, c);
}
void sz_dfs(int u, int pr){
sz[u] = 1;
for(auto v : tr[u])
if(v != pr)
sz_dfs(v, u), sz[u] += sz[v];
}
bool dfs(int u, int pr, pair<int, int> a, pair<int, int> b, pair<int, int> c){
for(auto v : tr[u])
if(v != pr)
if(dfs(v, u, a, b, c))
return true;
if(sz[u] >= b.f && sz[u] <= b.f + c.f){
cnt = b.f;
paint(u, pr, b.s);
return true;
}
return false;
}
vector<int> solve(int n, pair<int, int> a, pair<int, int> b, pair<int, int> c, int beg){
for(int i = 0; i < n; ++i)
was[i] = sz[i] = 0, tr[i].clear();
build_dfs(beg);
sz_dfs(beg, -1);
vector<int> res(n, 0);
if(dfs(beg, -1, a, b, c)){
// for(int i = 0; i < n; ++i)
// cout << ans[i] << " ";
// cout << endl;
cnt = a.f;
paint(beg, -1, a.s);
for(int i = 0; i < n; ++i)
res[i] = (ans[i] == 0 ? c.s : ans[i]);
}
return res;
}
vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
int m = p.size();
for(int i = 0; i < m; ++i){
g[p[i]].pb(q[i]);
g[q[i]].pb(p[i]);
}
vector<int> res;
vector<pair<int, int>> pr;
pr.pb({a, 1}), pr.pb({b, 2}), pr.pb({c, 3});
for(int i = 0; i < n; ++i){
sort(pr.begin(), pr.end());
do{
res = solve(n, pr[0], pr[1], pr[2], i);
if(res[0] != 0)
return res;
}while(next_permutation(pr.begin(), pr.end()));
}
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |