#include "split.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
int counter=0;
vector<bool> ban, visited;
vector<int> low, disc, sz, ans, par;
vector<pii> vect;
vector<vector<int> > graph, adj;
void dfs(int node, int p){
par[node]=p;
disc[node]=low[node]=counter++;
for (auto num:graph[node])if (num!=p){
if (disc[num]==-1)dfs(num, node), low[node]=min(low[node], low[num]), adj[node].pb(num), sz[node]+=sz[num];
else low[node]=min(low[node], disc[num]);
}
}
void label(int node, int p, int t){
visited[node]=1;
if (vect[t].fi)--vect[t].fi, ans[node]=vect[t].se;
for (auto num:adj[node])if (!ban[num])label(num, node, t);
}
void label2(int node, int p, int t){
visited[node]=1;
if (!vect[t].fi||ans[node])return;
--vect[t].fi;
ans[node]=vect[t].se;
for (auto num:graph[node])if (!ans[num])label2(num, node, t);
}
vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q){
vect.pb(mp(a, 1));
vect.pb(mp(b, 2));
vect.pb(mp(c, 3));
sort(vect.begin(), vect.end());
ans.resize(n, 0);
sz.resize(n, 1);
adj.resize(n);
low.resize(n);
disc.resize(n, -1);
graph.resize(n);
par.resize(n, -1);
visited.resize(n, 0);
ban.resize(n, 0);
for (int i=0; i<p.size(); ++i){
graph[p[i]].pb(q[i]);
graph[q[i]].pb(p[i]);
}
dfs(0, -1);
int mid=-1;
for (int i=0; i<n; ++i){
int mx=0;
for (auto num:adj[i])mx=max(mx, sz[num]);
if (mx<a&&sz[i]>=a)mid=i;
}
assert(mid!=-1);
int cc=sz[mid];
for (auto num:adj[mid])if (low[num]<disc[mid]&&cc-sz[num]>=vect[0].fi)cc-=sz[num], ban[num]=1;
if (n-cc>=vect[1].fi)swap(vect[0], vect[1]);
if (n-cc>=vect[0].fi){
label(mid, par[mid], 1);
ban.assign(n, 0);
for (int i=0; i<n; ++i)if (!visited[i]){
label2(i, -1, 0);
break;
}
for (int i=0; i<n; ++i)if (!ans[i])ans[i]=vect[2].se;
return ans;
}
vector<int> temp(n, 0);
return temp;
}
| # | 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... |