P7178 解题报告
elbissoPtImaerD · · 题解
简述题意
给定一张
满足每个点的度数
你需要将这张图黑白染色,满足每一个点有不多于
解题报告
考虑:让所有点均同色,然后逐步调整出符合题意的构造。
对于某一个点
此时将点
但是这样与
考虑将这些点作为新的
这样看似复杂度爆炸,实际上复杂度是有保证的。
我们定义一条边为不合法的当且仅当这条边的两个端点同色。
这样在初始时我们最多有
而每一次变色后,不合法的边的数量最劣也会减少
复杂度
const int N=2e5+3;
int n,cnt[N];
std::vector<int>G[N];
bool ans[N];
il void Upd(int u)
{
ans[u]^=1;
for(re int v:G[u])
ans[u]^ans[v]?--cnt[u],--cnt[v]:(++cnt[u],++cnt[v]);
for(re int v:G[u]) cnt[v]>2&&(Upd(v),7);
return;
}
void Solve()
{
rd(n);
for(re int i=1,x,u,v;i<=5;++i)
for(rd(x);x--;) rd(u),rd(v),G[u].pb(v),G[v].pb(u),++cnt[u],++cnt[v];
for(re int i=1;i<=n;++i) cnt[i]>2&&(Upd(i),7);
for(re int i=1;i<=n;++i) putchar(ans[i]?'A':'B');
return;
}