博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7.14T3
阅读量:4982 次
发布时间:2019-06-12

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

是我图论没学好,啊不对,应该说我小学奥数没学好,当时看见题里的欧拉路我就开始想这玩意的性质,画了满满一算草纸的图,也没得出什么结论来,最后手模了个4,还没模对,就光荣暴零了

首先我们应该知道,无向图一定有偶数个奇数度的点随便画,有反例算我输,那我们先不管连不连通,先搞个有欧拉路的图出来

问:怎么样就会有欧拉路?

答:只要这个图中所有点的度都为偶数,那这个图就一定是个欧拉路,当然了,可能连通也可能不连通

我们设g[i]表示i个点构成的不知道是不是连同的欧拉路,那么

g[i]=2C(i-1,2)

这个式子可以这么来理解,我在i-1个点中选2个点,随便连边或者不连边,我就得到了一个有i-1个点的无向图,为什么是i-1个点呢?因为我要留出一个点来平衡这个图,说是平衡,其实就是把一个普通的无向图搞成欧拉路,怎么搞呢?这个时候这i-1个点构成的

无向图一定有偶数个需要被连边变成偶数度的点,那就让留出来的点和需要被连边的点连边啊,这样一搞,奇数度的点就变成偶数度了,留出来的这个点也肯定连了偶数条边,那不就是个欧拉路了嘛

现在我们需要做的是把不连通搞成连通,怎么搞?这i个点不连通里肯定包含了2个点连通剩下的不连通,3个点连通剩下的不连通…,看到这有没有想到些什么?我们可以容斥啊,我们把小于i个点的连通都干掉,那剩下的就是i个点全部连通,设f[i]代表i个点全部连通的欧拉路,那么

f[i]=g[i]-∑f[j]*C(i-1,j-1)*g[i-j]

我们来稍微感性的理解一下这个式子,你让j个点连通,那就剩下i-j个点随便连就好了,可是这样的话你会发现你减重了,因为可能你的j个点连通,i-j个点随便连,恰好构成了k个点连通,那怎么办呢?我们在j个点连通中固定出一个点来,这样的话肯定就不重了,这就是C(i-1,j-1)里面-1的来源

 

1 //无向图一定是有偶数个奇数度的点 2 #include
3 #include
4 #define maxn 2010 5 #define ll long long 6 using namespace std; 7 const long long mod=1e9+7; 8 int n; 9 ll C[maxn][maxn];10 ll g[maxn],f[maxn];11 ll ksm(int x,ll b,ll c)12 {13 ll ans=1,a=(ll)x;14 a=a%c;15 while(b>0)16 {17 if(b&1) ans=(ans*a)%c;18 b=b>>1; a=(a*a)%c;19 }20 return ans%c;21 }22 int main()23 {24 scanf("%d",&n);25 for(int i=0;i<=n;++i)26 {27 C[i][0]=1;28 for(int j=1;j<=i;++j) C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;29 }30 for(int i=1;i<=n;++i)31 {32 int ls=((i-1)*(i-2))/2;//<==>C(i-1,2)33 ll mi=(ll)ls;34 g[i]=ksm(2,mi,mod);//每个点可连可不连35 ll L=ksm(2,C[i-1][2],mod);36 if(L!=g[i]) cout<<"计算错误"<
View Code

 

转载于:https://www.cnblogs.com/hzjuruo/p/11201532.html

你可能感兴趣的文章
UISplitViewController-分割控件自定义分割宽度是无法实现的
查看>>
MSMQ学习
查看>>
python网络爬虫--简单爬取糗事百科
查看>>
Unix目录结构的来历
查看>>
Apache启动失败(Windows 无法在本地计算机启动Apache2.2)
查看>>
Git 使用笔记
查看>>
iOS dom解析xml格式数据
查看>>
SDUT Problem_5 二哥的狗(水题)
查看>>
如何利用RMAN Debug和10046 Trace来诊断RMAN问题?
查看>>
Android性能优化
查看>>
USACO CONTEST 2002 SPRING 绿组.一进制奶牛[ucc]
查看>>
微信公众平台生成带参数二维码
查看>>
【spring boot】SpringBoot初学(2) - properties配置和读取
查看>>
ECSHOP info: Can't pConnect MySQL Server(localhost:3306)!
查看>>
设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)
查看>>
Application_Start和Application_End事件执行时间
查看>>
获取表格中的值
查看>>
Implement Trie (Prefix Tree)
查看>>
Island Perimeter
查看>>
学习进度(13)
查看>>