码迷,mamicode.com
首页 > 其他好文 > 详细

2829_Tree_模拟

时间:2017-11-07 22:01:23      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:一个   题目   .com   print   namespace   jpg   std   div   while   

题目描述

技术分享

思路

我们考虑当一个节点的颜色和他的父节点不向同时,这个节点肯定是要被反色的,所以我们直接for一下全部点统计一下答案就可以了

#include <stdio.h>
#include <queue>
#include <algorithm>
using namespace std;
#define N 700001
struct edge
{
    int to, next;
}e[N];
int l = 0;
int a[N], ls[N], ans[N], fa[N];
int cmp(int a, int b)
{
    return a < b;
}
int bfs()
{
    queue<int> t;
    t.push(1);
    while (!t.empty())
    {
        int now = t.front();
        t.pop();
        if (a[fa[now]] != a[now])
            ans[++l] = now;
        for (int i = ls[now]; i; i = e[i].next)
        {
            t.push(e[i].to);
        }
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    for (int i = 1; i < n; i++)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        fa[y] = x;
        e[i] = (edge) {y, ls[x]};
        ls[x] = i;
    }
    bfs();
    sort(ans + 1, ans + l + 1, cmp);
    for (int i = 1; i <= l; i++)
        printf("%d ", ans[i]);
    printf("\n");
}

 

2829_Tree_模拟

标签:一个   题目   .com   print   namespace   jpg   std   div   while   

原文地址:http://www.cnblogs.com/nidhogg/p/7801071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!