【2021寒假集训营第一场】C-红和蓝

红和蓝

https://ac.nowcoder.com/acm/contest/9981/C

图片说明
构造类问题往往都是由特殊到简单
而对于树形结构最特别的就是叶子

#include <bits/stdc++.h>
using namespace std;
int n, tot = 0;
int head[100010];
struct ty
{
    int t, next;
}edge[200010];
int f[100010];
int col[100010];
int cnt = 0;
bool boo = 1;
void addedge(int x, int y)
{
    edge[++tot].t = y;
    edge[tot].next = head[x];
    head[x] = tot;
}
void dfs1(int x, int fa)
{
    int son  = 0;
    for (int i = 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;
    }
}
void dfs2(int x, int fa)
{
    for (int i = 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];
        else col[edge[i].t] = col[x] ^ 1;
        dfs2(edge[i].t, x);
    }
}
int main()
{
    memset(head, -1, sizeof(head));
    memset(edge, -1, sizeof(edge));
    scanf("%d", &n);
    for (int i =1; i < n; i++)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        addedge(x, y);
        addedge(y, x);
    }
    dfs1(1, 0);
    if (f[0] != 0  || boo == 0)
    {
        printf("-1\n"); return 0;
    }javascript:void(0);
    col[1] = 1;
    dfs2(1, 0);
    for (int i = 1; i <= n;i++)
    {
        if (col[i] == 1) printf("R");
        else printf("B");
    }
    return 0;
}

全部评论
放错代码了?
点赞 回复 分享
发布于 2021-02-01 19:16

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
23 收藏 评论
分享
牛客网
牛客企业服务