你拿到了一棵树,请你给每个顶点染成红色或蓝色。 要求:每个红点周围有且仅有一个红点,每个蓝点周围有且仅有一个蓝点。 “周围”的定义:某点周围的点指通过邻边直接连接的点。 所谓树,即没有自环、重边和回路的无向连通图。

区块链毕设网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链游项目方科学家脚本开发培训

承接区块链项目定制开发

微信:btc9767

QQ :1330797917

TELEGRAM: BTCOK9

承接区块链项目定制开发


qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 你拿到了一棵树,请你给每个顶点染成红色或蓝色。 要求:每个红点周围有且仅有一个红点,每个蓝点周围有且仅有一个蓝点。 “周围”的定义:某点周围的点指通过邻边直接连接的点。 所谓树,即没有自环、重边和回路的无向连通图。