题目背景

从前森林里有一棵很大的mjt树,树上有很多小动物。

题目描述

mjt树上有 n 个房间,第 i 个房间住着 ai 只第bi 种小动物。

这n个房间用n-1条路连接起来,其中房间1位mjt树的根。

现在每个房间x的小动物想知道,以房间x为根的mjt树中有多少只它们的同类.

输入输出格式

输入格式:

第一行一个整数n,表示房间数

接下来n行,每行两个整数ai,bi

再之后n-1,每行两个整数x、y,表示x和y之间有一条路径

输出格式:

一行n个数,第i个数表示以房间i为根的mjt树中bi种小动物有多少只,两个数之间用空格隔开

输入输出样例

输入样例#1: 复制

5
2 1
3 1
4 2
5 1
6 2
1 2
1 3
3 4
3 5
输出样例#1: 复制

10 3 10 5 6

说明

bi<=n<=100000,ai<=1000

by xjjppm.

我也不知道我是怎么想出来的这么鬼畜的做法

对于每个颜色记录出该颜色上一次出现的位置

然后拓扑排序。。

各位都是一遍dfs 太强了orz。

// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
char buf[ << ], *p1 = buf, *p2 = buf;
//#define int long long
using namespace std;
const int MAXN = * 1e5 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
struct Edge {
int u, v, nxt;
}E[MAXN];
int head[MAXN], num = ;
inline void AddEdge(int x, int y) {
E[num] = (Edge){x, y, head[x]};
head[x] = num++;
}
int N, a[MAXN], b[MAXN], ans[MAXN], inder[MAXN], pre[MAXN];
vector<int>v[MAXN];
void dfs(int x, int fa) {
for(int i = head[x]; i != -; i = E[i].nxt) {
if(E[i].v == fa) continue;
if(pre[b[E[i].v]])
v[E[i].v].push_back(pre[b[E[i].v]]), inder[pre[b[E[i].v]]]++;
int gg = pre[b[E[i].v]];
pre[b[E[i].v]] = E[i].v;
dfs(E[i].v, x);
pre[b[E[i].v]] = gg;
} }
void Topsort() {
queue<int>q;
for(int i = ; i <= N; i++)
if(!inder[i]) q.push(i);
while(q.size() != ) {
int p = q.front(); q.pop();
for(int i = ; i < v[p].size(); i++) {
a[v[p][i]] += a[p];
inder[v[p][i]]--;
if(!inder[v[p][i]]) q.push(v[p][i]);
}
}
}
main() {
#ifdef WIN32
freopen("a.in", "r", stdin);
#endif
memset(head, -, sizeof(head));
N = read();
for(int i = ; i <= N; i++) a[i] = read(), b[i] = read();
for(int i = ; i <= N - ; i++) {
int x = read(), y = read();
AddEdge(x, y); AddEdge(y, x);
}
pre[b[]] = ;
dfs(, );
Topsort();
for(int i = ; i <= N; i++)
printf("%lld ", a[i]);
return ;
}

校内胡策 T9270 mjt树的更多相关文章

  1. T9270 mjt树

    题目背景 从前森林里有一棵很大的mjt树,树上有很多小动物. 题目描述 mjt树上有 n 个房间,第 i 个房间住着 ai 只第bi 种小动物. 这n个房间用n-1条路连接起来,其中房间1位mjt树的 ...

  2. 弱省胡策 Magic

    弱省胡策 Magic 求\(n\)个点\(n\)的条边的简单联通图的个数. 毒瘤,还要写高精. 我们枚举环的大小\(k\),\(\displaystyle ans=\sum_{k=3}^nC_n^k ...

  3. 【弱省胡策】Round #5 Count

    [弱省胡策]Round #5 Count 太神仙了. \(DP\)做法 设\(f_{n,m,d,k}\)表示\(n*m\)的矩阵,填入第\(k\)个颜色,并且第\(k\)个颜色最少的一列上有\(d\) ...

  4. 【ContestHunter】【弱省胡策】【Round0】(A)&【Round1】(B)

    DP+容斥原理or补集转化?/KD-Tree 唔……突然发现最早打的两场(打的最烂的两场)没有写记录……(太烂所以不忍记录了吗... 还是把搞出来了的两道题记录一下吧= =勉强算弥补一下缺憾…… Ro ...

  5. luoguP3769 [CH弱省胡策R2]TATT

    luoguP3769 [CH弱省胡策R2]TATT PS:做这题前先切掉 P4148简单题,对于本人这样的juruo更助于理解,当然dalao就当练练手吧 题目大意: 现在有n个四维空间中的点,请求出 ...

  6. 【弱省胡策】Round #7 Rectangle 解题报告

    orz PoPoQQQ 的神题. 我的想法是:给每一个高度都维护一个 $01$ 序列,大概就是维护一个 $Map[i][j]$ 的矩阵,然后 $Map[i][j]$ 表示第 $i$ 根柱子的高度是否 ...

  7. STOI补番队胡策

    ROUND 1 第一轮是我出的. 比赛情况: #1 NanoApe 300 (完美AK) #2 && #3 swm_sxt / ccz  200 A.candy 这道题就是个nim游戏 ...

  8. 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)

    A------------------------------------------------------------------------------------ 题目链接:http://20 ...

  9. 城乡联谊胡策会糊厕R3

    因为时间关系这把没设计题面,而且居然还出了锅……T_T 信 原题是leetcode WeeklyContest52 的T1(懒得去找url了 随便搞,但是无解输-1 数字统计 原题PE603 记前n个 ...

随机推荐

  1. Python爬虫教程-05-python爬虫实现百度翻译

    使用python爬虫实现百度翻译功能 python爬虫实现百度翻译: python解释器[模拟浏览器],发送[post请求],传入待[翻译的内容]作为参数,获取[百度翻译的结果] 通过开发者工具,获取 ...

  2. ubuntu16下面安装vmware tools后仍然未全屏问题

    1.默认下载ubuntu16的iso镜像后,自带的有vmtools.解压 tar -xzvf  VMwareTools-10.0.6-3595377.tar.gz 进入解压目录. 执行:sudo ./ ...

  3. Java基础之PDF文件的合并

    1.首先下载一个jar包:pdfbox-app-1.7.1.jar 2.代码如下: package com; import java.io.File; import java.io.IOExcepti ...

  4. PMP项目管理

    http://blog.sina.com.cn/s/blog_a3922d430102wv38.html https://www.zhihu.com/question/19882243 最近学习pmp ...

  5. SQL点点滴滴_SQL分页查询

    假如tb_customer表中的数据量非常大,在显示时要分页显示而且每页只显示10条信息.为了效果我们取第三页的数据. 方法一:遍历两次表,取不同的数据. select top 10 * from t ...

  6. Windows API 查找窗体,发送Windows消息

    最近项目中需要做Windows消息截获操作,在网上找了一些资料. public class WindowsAPI { /// <summary> /// 回调函数代理 /// </s ...

  7. 对于当下国产CPU如火如荼有感

    国家在国家战略层面去做国产CPU这个事情,从初衷来说是好的.国产CPU战略如果能够实现,则会大大加强我国在计算机产业领域从头到尾的话语权与技术竞争力.但是个人觉得,事情不是那么简单.我将从下面几个方面 ...

  8. 用适配器模式处理复杂的UITableView中cell的业务逻辑

    用适配器模式处理复杂的UITableView中cell的业务逻辑 适配器是用来隔离数据源对cell布局影响而使用的,cell只接受适配器的数据,而不会与外部数据源进行交互. 源码: ModelCell ...

  9. XmlIgnore的使用

    public class Group { public string GroupName; [XmlIgnore] public string Comments; } 在序列化时,其结果如下所示 &l ...

  10. Redis 集群缓存测试要点--关于 线上 token 失效 BUG 的总结

    在测试账户系统过程中遇到了线上大面积用户登录态失效的严重问题,事后对于其原因及测试盲点做了一些总结记录以便以后查阅,总结分为以下7点,其中原理性的解释有些摘自网络. 1.账户系统token失效问题复盘 ...