博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019CCPC秦皇岛赛区 F:Forest Program(并查集+LCA)
阅读量:3898 次
发布时间:2019-05-23

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

【题解】

题意:输出删除不同边使得所有连通图上无环的所有可能情况并取模,每条边最多只存在于一个环中。

思路:令环的个数为N,每个环内的边数为ai,总边数为m,则答案为 (\coprod_{i=1}^{N}2^{a_{i}}-1)*(2^{m-\sum_{j=1}^{N}a_{j}})  ,即累乘2^(每个环内的边数)-1再乘上2^(无影响的边的数目)。

这个答案很好得到,但是我们要怎么实现计算出每个环内的边数呢?

我们考虑到每条边最多只存在于一个环中,所以只要我们把一个环中的任意一条边删除并且记录下来,我们就会得到一棵树,那么我们就可以把问题转化成 ---> 求给定一对顶点的树上最短路径问题。那么我们怎么确定这对顶点呢?我们用并查集判断是否成环即可找出这条边,即连接这一对点的边。

【代码】

#include 
using namespace std;typedef long long ll;const int maxn=5e5+10;const ll mod=998244353;int pre[maxn],l[maxn],r[maxn];int vis[maxn];struct Edge{ int to,next;}edge[maxn*2];int Find(int x){ return pre[x]==x?x:pre[x]=Find(pre[x]);}int head[maxn],tot;void addedge(int u,int v){ edge[tot].to=v; edge[tot].next=head[u]; head[u]=tot++;}int fa[maxn][20];int deg[maxn];void bfs(int root){ queue
que; deg[root]=0; fa[root][0]=root; que.push(root); while(!que.empty()){ int tmp=que.front(); que.pop(); for(int i=1;i<20;i++) fa[tmp][i]=fa[fa[tmp][i-1]][i-1]; for(int i=head[tmp];i!=-1;i=edge[i].next){ int v=edge[i].to; if(v==fa[tmp][0]) continue; deg[v]=deg[tmp]+1; fa[v][0]=tmp; que.push(v); } }}int LCA(int u,int v){ if(deg[u]>deg[v]) swap(u,v); int hu=deg[u],hv=deg[v]; int tu=u,tv=v; for(int det=hv-hu,i=0;det;det>>=1,i++) if(det&1) tv=fa[tv][i]; if(tu==tv) return tu; for(int i=19;i>=0;i--){ if(fa[tu][i]==fa[tv][i]) continue; tu=fa[tu][i]; tv=fa[tv][i]; } return fa[tu][0];}ll qpow(ll a,ll b){ ll ret=1; while(b){ if(b&1) ret=ret*a%mod; a=a*a%mod; b>>=1; } return ret;}int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ tot=0; for(int i=1;i<=n;i++) pre[i]=i,head[i]=-1; int cnt=0; for(int i=0;i

 

转载地址:http://nhfen.baihongyu.com/

你可能感兴趣的文章
数据挖掘常用算法整理
查看>>
JNDI学习总结(一)——JNDI数据源的配置
查看>>
JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
查看>>
JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
查看>>
JavaWeb学习总结(四十九)——简单模拟Sping MVC
查看>>
Struts1和Struts2的区别和对比(完整版)
查看>>
在Eclipse中初用lucene
查看>>
lucene在eclipse下运行
查看>>
eclipse 安装struts2 插件
查看>>
Liferay配置文件Tag标签参考
查看>>
JavaLiferay研究之十六:FCKeditor如何插入服务器上的资源?
查看>>
Liferay研究之十二:对Liferay框架的几点分析总结 收藏
查看>>
Eclipse快捷键大全(转载)
查看>>
Google爬虫如何抓取JavaScript的?
查看>>
SAP HANA SQL/MDX及TCP/IP端口介绍
查看>>
SAP HANA使用XS和HTTP创建proxy
查看>>
SAP HANA SLT在表中隐藏字段并传入HANA的方法
查看>>
SAP HANA关于触发器的深入理解
查看>>
CSDN要求必须绑定手机号
查看>>
SAP HANA查看某一用户最后登录时间及无效连接次数
查看>>