博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HNOI2015]实验比较
阅读量:5740 次
发布时间:2019-06-18

本文共 2031 字,大约阅读时间需要 6 分钟。

[HNOI2015]实验比较

题目首先给出了一个基环外向树,于是我们先缩环。一个环必须全部由\(=\)连接,否则答案为\(0\)

缩了环过后就是一棵树了。

乍一看以为是经典的有序表合并问题,直接用组合数学搞定。可是题目中一个合法的序列可以存在\(=\)。这样我们\(DP\)就是了。

\(g_{i,j,k}\)表示一个长度为\(i\)的有序表和一个长度为\(j\)的有序表,合并过后有\(k-1\)\(<\)连接的方案数。

预处理出\(g\)过后就可以转移了。

代码:

#include
#define ll long long#define N 105using namespace std;inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}const ll mod=1e9+7;int n,m;int fr[N],to[N],p[N];ll c[N][N];int f[N];int r[N];vector
e[N];int Getf(int v) {return v==f[v]?v:f[v]=Getf(f[v]);}int size[N];bool vis[N],ins[N];void chk_dfs(int v) { vis[v]=ins[v]=1; for(int i=0;i
>=1,t=t*t%mod) if(x&1) ans=ans*t%mod; return ans;}bool cmp(int a,int b) {return size[a]
=1;i--) dp[v][i]=dp[v][i-1]; dp[v][0]=0;}int main() { n=Get(),m=Get(); inv2[0]=1; inv2[1]=mod+1>>1; for(int i=1;i<=n;i++) inv2[i]=inv2[i-1]*(mod+1>>1)%mod; pre(n); for(int i=0;i<=n;i++) fac[i]=fac[i-1]*i%mod; ifac[n]=ksm(fac[n],mod-2); for(int i=n-1;i>=0;i--) ifac[i]=ifac[i+1]*(i+1)%mod; for(int i=1;i<=n;i++) f[i]=i; for(int i=0;i<=n;i++) for(int j=0;j<=i;j++) c[i][j]=(!j||i==j)?1:(c[i-1][j-1]+c[i-1][j])%mod; int a,b; char op; for(int i=1;i<=m;i++) { a=Get(); while(op=getchar(),op!='<'&&op!='='); b=Get(); fr[i]=a,to[i]=b; p[i]=op=='<'; if(!p[i]) f[Getf(a)]=Getf(b); } for(int i=1;i<=m;i++) { if(p[i]) { if(Getf(fr[i])==Getf(to[i])) {cout<<0;return 0;} e[Getf(fr[i])].push_back(Getf(to[i])); r[Getf(to[i])]++; } } for(int i=1;i<=n;i++) if(Getf(i)==i&&!vis[i]) chk_dfs(i); for(int i=1;i<=n;i++) { if(Getf(i)==i&&!r[i]) e[0].push_back(i); } dfs(0); ll ans=0; for(int i=1;i<=n+1;i++) (ans+=dp[0][i])%=mod; cout<

转载于:https://www.cnblogs.com/hchhch233/p/10484803.html

你可能感兴趣的文章
matlab corr2原码,Ncorr-二维数字图像校正软件
查看>>
mysql增量,MySQL完全、增量的备份与恢复
查看>>
matlab程序复制出现乱码,matlab代码或中文复制到word就变成乱码怎么办?
查看>>
java writer append,Java StringWriter append()方法
查看>>
动态矩阵 matlab代码,动态矩阵控制
查看>>
用php实现一个音频播放的代码,用VBS实现音乐播放的多个代码小结
查看>>
linux原生迅雷文本模式,ubuntu 下运行原生的迅雷
查看>>
linux系统真正优势学习方法,Linux系統真正的優勢以及學習方法,linux優勢學習方法...
查看>>
上海师范大学c语言考卷答案,上海师范大学C语言期末考试标准试卷.doc
查看>>
cof文件在C语言中怎么引入,COF文件擴展名: 它是什麼以及如何打開它?
查看>>
android imageview旋转动画,Android UI之ImageView实现图片旋转和缩放
查看>>
android屏幕录制功能,Android利用ADB进行屏幕录制
查看>>
gt240m x86 android,国产平板福音!INTEL ATOM x86_64位Xposed框架,Android5.1(lolipop)适用...
查看>>
android7.1自带壁纸,RK3399 Android7.1 修改壁纸
查看>>
android系统文件重命名文件格式,重命名下载后的文件系统文件中的PhoneGap的Android...
查看>>
Java入门系列-26-JDBC
查看>>
区块链教程Fabric1.0源代码分析Peer EndorserClient(Endorser客户端)
查看>>
Java Web之SpringMVC 进行参数绑定
查看>>
如何解决OutOfMemoryError
查看>>
喔趣获逾1.6亿元B轮融资,打造中国的Kronos+Recruit
查看>>