你拿到了一棵树,请你给每个顶点染成红色或蓝色。 要求:每个红点周围有且仅有一个红点,每个蓝点周围有且仅有一个蓝点。 “周围”的定义:某点周围的点指通过邻边直接连接的点。 所谓树,即没有自环、重边和回路的无向连通图。
区块链毕设网qklbishe.com为您提供问题的解答
你拿到了一棵树,请你给每个顶点染成红色或蓝色。
要求:每个红点周围有且仅有一个红点,每个蓝点周围有且仅有一个蓝点。
“周围”的定义:某点周围的点指通过邻边直接连接的点。
所谓树,即没有自环、重边和回路的无向连通图。
#include <bits/stdc++.h>
using namespace std;
intn, tot =0;
inthead[100010];
struct ty
{
intt, next;
}edge[200010];
intf[100010];
intcol[100010];
intcnt =0;
bool boo =1;
voidaddedge(intx,inty)
{
edge[++tot].t = y;
edge[tot].next = head[x];
head[x] = tot;
}
voiddfs1(intx,intfa)
{
intson =0;
for(inti = head[x]; i != -1; i= edge[i].next)
{
if(edge[i].t == fa)continue;
son++;
dfs1(edge[i].t, x);
}
if(son ==0|| f[x] ==0)
{
if(f[fa] !=0) {boo =0;return;}
f[x] = f[fa] = ++cnt;
}
}
voiddfs2(intx,intfa)
{
for(inti = head[x]; i != -1; i= edge[i].next)
{
if(edge[i].t == fa)continue;
if(f[edge[i].t] == f[x]) col[edge[i].t] = col[x];
elsecol[edge[i].t] = col[x] ^1;
dfs2(edge[i].t, x);
}
}
intmain()
{
memset(head, -1, sizeof(head));
memset(edge, -1, sizeof(edge));
scanf("%d", &n);
for(inti =1; i < n; i++)
{
intx, y;
scanf("%d%d", &x, &y);
addedge(x, y);
addedge(y, x);
}
dfs1(1,0);
if(f[0] !=0 || boo ==0)
{
printf("-1n");return0;
}javascript:void(0);
col[1] =1;
dfs2(1,0);
for(inti =1; i <= n;i++)
{
if(col[i] ==1) printf("R");
elseprintf("B");
}
return0;
}
53:57
以上就是关于问题你拿到了一棵树,请你给每个顶点染成红色或蓝色。 要求:每个红点周围有且仅有一个红点,每个蓝点周围有且仅有一个蓝点。 “周围”的定义:某点周围的点指通过邻边直接连接的点。
所谓树,即没有自环、重边和回路的无向连通图。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训