多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > BZOJ 4013 HNOI2015 實驗比較 樹形DP+組合數學

BZOJ 4013 HNOI2015 實驗比較 樹形DP+組合數學

來源:程序員人生   發布時間:2015-08-06 10:28:04 閱讀次數:3306次

題目大意:給定1張圖,每條邊有’=’和’<’兩個屬性,每一個點入度最多為1,求這張圖可以壓成多少個用’=’和’<’連接的序列
我只貼代碼~~
題解自己搜~~

#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 110 #define MOD 1000000007 using namespace std; struct abcd{ int to,next; }table[M]; int head[M],tot; int n,m; int C[M][M],f[M][M]; int a[M][M],degree[M]; int v[M],T; void Add(int x,int y) { table[++tot].to=y; table[tot].next=head[x]; head[x]=tot; } namespace Union_Find_Set{ int fa[M]; int Find(int x) { if(!fa[x]||fa[x]==x) return fa[x]=x; return fa[x]=Find(fa[x]); } void Union(int x,int y) { x=Find(x);y=Find(y); if(x==y) return ; fa[x]=y; } } void Pretreatment() { int i,j; for(i=0;i<=n;i++) { C[i][0]=1; for(j=1;j<=i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD; } } void DFS(int x) { int i; v[x]=T; for(i=head[x];i;i=table[i].next) { if(v[table[i].to]==T) throw true; if(v[table[i].to]) continue; DFS(table[i].to); } } void Tree_DP(int x) { int i,j,k,l; f[x][0]=1; for(i=head[x];i;i=table[i].next) { Tree_DP(table[i].to); static int g[M]; memset(g,0,sizeof g); for(j=1;j<=n;j++) for(k=0;k<=j;k++) for(l=j-k;l<=j;l++) ( g[j] += (long long) f[x][k] * f[table[i].to][l] % MOD * C[j][k] % MOD * C[k][k+l-j] % MOD )%=MOD; memcpy(f[x],g,sizeof g); } for(i=n+1;i;i--) f[x][i]=f[x][i-1]; f[x][0]=0; } int main() { using namespace Union_Find_Set; int i,j,x,y; char p[10]; cin>>n>>m; Pretreatment(); for(i=1;i<=m;i++) { scanf("%d%s%d",&x,p,&y); if(p[0]=='=') Union(x,y); else Add(x,y); } for(x=1;x<=n;x++) for(i=head[x];i;i=table[i].next) a[Find(x)][Find(table[i].to)]=1; memset(head,0,sizeof head); tot=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(a[i][j]) Add(i,j),degree[j]++; for(i=1;i<=n;i++) if(Find(i)==i&&!v[i]) { try { ++T; DFS(i); } catch(bool) { cout<<0<<endl; return 0; } } for(i=1;i<=n;i++) if(Find(i)==i&&!degree[i]) Add(0,i); Tree_DP(0); int ans=0; for(i=1;i<=n+1;i++) (ans+=f[0][i])%=MOD; cout<<ans<<endl; return 0; }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: аⅴ成人天堂中文在线 | 福利区站| 亚洲欧美日韩人成 | 成人亚洲视频 | 自拍偷拍校园春色 | 国产成人精品亚洲午夜麻豆 | 亚洲一区二区三区高清不卡 | 亚洲欧美一区二区视频 | 久久亚洲不卡一区二区 | 精品国产亚洲人成在线 | 国产精品入口麻豆免费 | a级爱爱视频 | 国产美女精品自拍 | 国产成人精品综合久久久 | 免费的国语一级淫片 | 亚洲综合一区二区三区四区 | 亚洲欧美精品 | 好吊色永久免费视频大全 | 国产精品60岁老女人 | 久久久久久久国产精品视频 | 波多野吉衣 免费一区 | www.亚洲第一 | 最近更新中文字幕4 | 欧美日韩一区二区综合 | 免费高清毛片在线播放视频 | 欧美黑人粗大 | 欧美日韩一区二区在线视频播放 | 久草在线播放视频 | 国产精品国产国产aⅴ | 亚洲精品资源 | 欧美大片a一级毛片视频 | 国产精品午夜在线播放a | 精品视频一区二区三区四区五区 | 九一国产精品 | 成人免费体验区福利云点播 | 日韩在线影视 | 花蝴蝶亚洲一区二区三区 | 99www综合久久爱com | 欧美精品一区二区三区在线 | 国产一区二区福利 | 99综合网 |