校內胡策 T9270 mjt樹

2022-04-30 06:42:06 字數 1783 閱讀 4705

從前森林裡有一棵很大的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 13 1

4 25 1

6 21 2

1 33 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#include

#include

#include

#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? eof : *p1++)

char buf[1

<< 21], *p1 = buf, *p2 =buf;

//#define int long long

using

namespace

std;

const

int maxn = 2 * 1e5 + 10

;inline

intread()

while(c >= '

0' && c <= '

9') x = x * 10 + c - '

0', c =getchar();

return x *f;

}struct

edge e[maxn];

int head[maxn], num = 0

;inline

void addedge(int x, int

y) ;

head[x] = num++;

}int

n, a[maxn], b[maxn], ans[maxn], inder[maxn], pre[maxn];

vector

v[maxn];

void dfs(int x, int

fa)

}void

topsort()

}}main()

pre[b[

1]] = 1

; dfs(

1, 0

);

topsort();

for(int i = 1; i <= n; i++)

printf(

"%lld

", a[i]);

return0;

}

隊內胡策 10 30 T2

求乙個被memset卡時的人的心理陰影面積 嗯。多叉樹。考試的時候想成二叉樹了 兩個人肯定盡量去堵對方的路 所以他們一定會在乙個點相遇 如果這個點還有其他分枝,按最優原則分配給兩個人 如果兩個人走過的總邊數為奇數,那麼相遇後,下乙個選擇的人是yjq,反之為hja。每個人選擇當前可以選擇的分枝中子樹權...

T9輸入法的實現

t9輸入法,名字聽起來陌生,可是大家卻經常使用它。可以說t9輸入法是輸入法歷史中的一次革命。至少自t9輸入法開始,輸入法有長足的進步。如圖手機中九個數字鍵。26個英文本母被分配到2至9這8個數字鍵上。以前想輸入英文單詞的時候總是需要連續多次按某個鍵,才能得到目標字母。比如想輸入 hello 就需要按...

S4加入T9檢索

讓你的s4 加入聯絡人撥號圖示 調出瀏覽器退出鍵與退出提示 農曆日曆 4 h7 x r1 n m 聯絡人加入撥號圖示 拔出 方便了 j5 t c5 j v r7 o d x,i m 撥號介面t9拼音檢索聯絡人4 b i a m a e 9 m.c 快門聲音開關鍵 等等 q f p i 5 n m w...