【bzoj1005】
自從明明學了樹的結構,就對奇怪的樹產生了興趣......給出標號為1到n的點,以及某些點最終的度數,允許在
任意兩點間連線,可產生多少棵度數滿足要求的樹?
第一行為n(0 < n < = 1000),
接下來n行,第i+1行給出第i個節點的度數di,如果對度數不要求,則輸入-1
乙個整數,表示不同的滿足要求的樹的個數,無解輸出031
-1-1
2關於prufer序列這個定理的證明,
給出大佬部落格
我這裡就給乙個結論
寫到**裡,ok!
#include#include【bzoj1430】#include
#include
#include
#include
#include
#include
#include
#include
#include
#define il inline
#define re register
using
namespace
std;
const
int n=1111
;int
n,m,p,d[n],ans[n],chk[n],pr[n],cnt[n],tot,l;
il void
filt()
}il
void add(int p,int
v) }
}}il
void mul(int
x)
while(ans[l+1]>0)}
intmain()
if(n==1
)
for(int i=1;i<=n;i++)
if(d[i]==-1) m++;
else
}if(p>n-2
) add(n-2,1
); add(n-2-p,-1
);
for(int i=1;i<=n;i++)
if(d[i]>0) add(d[i],-1
); ans[
1]=1;l=1;/*
for(int i=1;i<=tot;i++)
cout
for(int i=1;i<=tot;i++)
//cout
mul(m);
printf("%d
",ans[l]);
for(int i=l-1;i>=1;i--)
printf(
"%06d
",ans[i]);
return0;
}
一開始森林裡面有n只互不相識的小猴子,它們經常打架,但打架的雙方都必須不是好朋友。每次打完架後,打架的雙方以及它們的好朋友就會互相認識,成為好朋友。經過n-1次打架之後,整個森林的小猴都會成為好朋友。 現在的問題是,總共有多少種不同的打架過程。 比如當n=3時,就有六種不同的打架過程。
乙個整數n。
一行,方案數mod 9999991。496
50%的資料n<=10^3。
100%的資料n<=10^6。
【soltuion】
這不是剛剛那題的弱弱弱化版?
#include#include我不會告訴你這篇部落格只是乙個刷題記錄#include
#include
#include
#include
#include
#include
#include
#include
#include
#define il inline
#define re register
#define mod 9999991
using
namespace
std;
typedef
long
long
ll;int n,ans=1
;int
main()
prufer數列學習筆記
學了一種新姿勢叫prufer數列,可以用來解一些關於無根樹計數的問題。prufer數列是一種無根樹的編碼表示,對於一棵n個節點帶編號的無根樹,對應唯一一串長度為n 2的prufer編碼。1 無根樹轉化為prufer序列。首先定義無根樹中度數為1的節點是葉子節點。找到編號最小的葉子並刪除,序列中新增與...
prufer序列複習小結
快要省選了。抽點時間複習一下東西 以免漏了一些東西 為了在省選之前覺得自己什麼都會 每一次選擇乙個編號最小,並且度數為1的點 把它刪掉 然後讓他唯一連向的點加入prufer序列 如果只有兩個點就結束 這個的話,你可以理解為有乙個陣列a 表示每乙個數在prufer裡面出現的次數 然後每一次,你就選出p...
Prufer序列相關
最近做到一些題,用到了prufer序列,挺有用的,在這裡學習一下。prufer數列是無根樹的一種數列,通過乙個prufer序列可以唯一表示一棵頂點帶標號的無根樹,點數為n的樹轉化來的prufer數列長度為n 2,它有很多的性質 一種生成prufer序列的方法是迭代刪點,直到原圖僅剩兩個點。對於一棵頂...