從前森林裡有一棵很大的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: 複製
52 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...