這題的思路很精妙,因為我們發現每個點有兩種選擇,一種是塗新的顏色,一種是塗原來出現的顏色
如果按樹形dp的方法做,很難做,因為無法判斷點之間的路徑以及存在的顏色關係。因此想到使用dfs序的方式,轉化成鏈式
這樣該節點塗色之前父親節點也被塗色。而新顏色可以隨便選,原來的顏色必須和父親節點的顏色一樣
#includeusingview codenamespace
std;
typedef
long
long
ll;const
int n=3e5+10
;const
int mod=1e9+7
;ll f[
330][330
];int
main()
f[0][0]=1
;
for(i=1;i<=n;i++)
}ll ans=0
;
for(i=1;i<=k;i++)
cout
return0;
}
dfs序 線段樹
傳送門 現有一棵樹,有以下操作 1.節點x及其所有子孫顏色都變更為k。2.要求你回答節點x的顏色。初始所有點都沒有染色。input 第一行乙個整數t t 10 表示樣例組數。對於每個測試樣例 第一行乙個整數n n 5e4 表示樹的節點個數。接下來n行,每行兩個整數u,v 1 u,v n 表示樹中u的...
牛客 字典序 思維
題目大意 給出乙個長度為 n 的數列 a 構造 s i 是數列 a 去掉 a i 後的數列,現在需要對 s 排序,輸出排序後的結果 題目分析 一提到排序,可以試著寫一下 sort 的 cmp 然後剩下的就不用我們操心了 對於 cmp 函式,我們的目標是給出兩個位置 x 和 y 從而確定其相應的大小 ...
牛客 數獨挑戰 dfs
題目鏈結 1 暴力法 tle include using namespace std const int inf 0x3f3f3f3f typedef long long ll int e 10 10 int r 10 10 記錄該行 1 9是否出現 出現為 1 int c 10 10 int k ...