日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

題目大意:給定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; }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 91精品国产高清一区二区三区 | 九九视频在线 | 日韩免费在线播放 | 久久首页 | 精品一区二区三区成人精品 | 天堂资源 | 亚洲日本久久 | 国产成人精品一区二区三区在线 | 黄色在线| av一区在线 | 日本免费成人 | 婷婷综合五月天 | 久久嫩草精品久久久精品才艺表演 | 五月天丁香社区 | 国产精品亚洲成人 | 午夜网站在线观看 | 国产精品美女久久久免费 | 久久久成人网 | 国产精品一区二区久久 | 91麻豆精品国产91久久久使用方法 | 天堂网在线视频 | 久久精品日韩 | 日本天堂在线 | 国产精品一区二区av日韩在线 | 国产一区二区三区免费观看在线 | 婷婷丁香六月天 | 亚洲成人av一区 | 日韩a在线| 国产精品资源 | 国产欧美精品区一区二区三区 | 秋霞午夜日韩免费毛片 | 免费观看亚洲 | 日本免费三片免费观看 | xxxx中国一级片| 国产91精品一区二区 | 亚洲视频在线观看免费 | 97免费在线观看视频 | 欧美精品免费在线观看 | 伊人成综合 | 日本视频在线观看 | 亚洲iv一区二区三区 |