alice家裡有一盞很大的吊燈。所謂吊燈,就是由很多個燈泡組成。只有乙個燈泡是掛在天花板上的,剩下的燈泡都是掛在其他的燈泡上的。也就是說,整個吊燈實際上類似於一棵樹。其中編號為1的燈泡是掛在天花板上的,剩下的燈泡都是掛在編號小於自己的燈泡上的。
現在,alice想要辦一場派對,她想改造一下這盞吊燈,將燈泡換成不同的顏色。她希望相同顏色的燈泡都是相連的,並且每一種顏色的燈泡個數都是相同的。
alice希望你能告訴她,總共有哪些方案呢?
alice是乙個貪心的孩子,如果她發現方案不夠多,或者太多了,就會很不高興,於是她會嘗試調整。對於編號為x(x≠1)的燈泡,如果原來是掛在編號為f[x]的燈泡上,那麼alice會把第x個燈泡掛到第 ( f[x] + 19940105 ) mod (x-1) + 1 個燈泡上。
由於九在古漢語中表示極大的數,於是,alice決定只調整9次。對於原始狀態和每一次調整過的狀態,alice希望你依次告訴她每種狀態下有哪些方案。
對於100%的資料,n<=1.2*106。
我好像會n^2的樹形dp?看一眼n的範圍發現過不了
#include
#include
#include
#include
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define drp(i,st,ed) for (int i=st;i>=ed;--i)
#define fill(x,t) memset(x,t,sizeof(x))
const
int n=
2000000
;struct edge e[n*2]
;int r[n]
,d[n]
,queue[n]
,size[n]
;int ls[n]
,fa[n]
,edcnt;
intread()
void
add_edge
(int x,
int y)
; ls[x]
=edcnt;
}void
top_sort
(int n)}}
drp(i,n,1)
r[size[i]]++
;}}int
main
(void)if
(wjp>=n/i)
}rep
(i,2
,n) fa[i]
=(fa[i]
+19940105)%
(i-1)+
1;}return0;
}
BZOJ3004 吊燈 結論 毒瘤
n 個節點的樹,判斷能否劃分成 frac 個大小為 k 的聯通塊 首先 k 必須是 n 的倍數。然後剛開始我就非常傻的以為輸出所有約數就行了。但是圖是這樣,k 2 的話肯定是不行的。結論 若 k 是可行的,則至少有 frac 個節點的大小為 k 的倍數 證明 直接歸納吧。k n 的時候顯然 k n ...
bzoj3124 亂搞 直徑
description 小q最近學習了一些圖論知識。根據課本,有如下定義。樹 無迴路且連通的無向圖,每條邊都有正整數的權值來表示其長度。如果一棵樹有n個節點,可以證明其有且僅有n 1 條邊。路徑 一棵樹上,任意兩個節點之間最多有一條簡單路徑。我們用 dis a,b 表示點a和點b的路徑上各邊長度之和...
BZOJ5085 最大 亂搞
description 給你乙個n m的矩形,要你找乙個子矩形,價值為左上角左下角右上角右下角這四個數的最小值,要你最大化矩形的價值。sample input 2 21 2 3 4sample output 1bitset 好 n 3信仰ac include include include incl...