F.Forest Program

千摆渡题解
找环可以使用dfs一遍求出。

方法为:vis数组设置为三种状态,0表示未被访问过。1表示正在被访问,即边指向的结点是当前结点在dfs树上的祖先节点。2表示访问完毕。同时dfs的同时记录每一个结点的先驱pre。如果边访问到了vis为1的数组,说明存在环,则通过pre数组,从当前结点回跳到指向的结点,经过的步数为环的长度-1。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
constexpr int N=3000010;
constexpr ll mod=998244353;
ll pow2[N];
int h[N],e[2*N],ne[2*N],idx;
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;}
int vis[N];
ll ans;
int n,m;
int cnt;
int pre[N];
void dfs(int u,int fr)
{vis[u]=1;for(int i=h[u];i!=-1;i=ne[i]){int v=e[i];if(i==(fr^1)||vis[v]==2) continue;if(vis[v]==1){int now=u;int k=1;while(now!=v) now=pre[now],k++;cnt+=k;ans=(ans*(pow2[k]-1)%mod+mod)%mod;}else pre[v]=u,dfs(v,i);}vis[u]=2;
}
int main()
{IO;pow2[0]=1;for(int i=1;i<=300000;i++) pow2[i]=pow2[i-1]*2%mod;while(cin>>n>>m){memset(h,-1,(n+1)*sizeof(int));idx=0;memset(vis,0,(n+1)*sizeof(int));memset(pre,0,(n+1)*sizeof(int));cnt=0;for(int i=1;i<=m;i++){int a,b;cin>>a>>b;add(a,b),add(b,a);}ans=1;for(int i=1;i<=n;i++)if(!vis[i]) dfs(i,-1);ans=ans*pow2[m-cnt]%mod;cout<<ans<<'\n';}
}

HDU6736 F.Forest Program(dfs找环)相关推荐

  1. 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program

    2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program 题目链接 The kingdom of Z ...

  2. Mr. Kitayuta‘s Technology CodeForces - 505D(并查集+拓扑排序或dfs找环) 题解

    题目  Shuseki Kingdom is the world's leading nation for innovation and technology. There are n cities ...

  3. 2019 CCPC 秦皇岛F Forest Program(dfs)

    传送门 题意:给定一张无向简单图,同时规定一条边只属于一个环.可以删除任意条边使得这张图变成森林,也就是使得每一个连通块都是树.求一共有多少种方案. 分析:由于原题规定一条边只属于一个环,不需要考虑环 ...

  4. Forest Program dfs+tanjar仙人掌

    题目链接 CCPC2019 F题. 题意:给一颗仙人掌树,让你求每一个小环的边的个数,用快速幂即可求解. 思路:第一反应是tanjar乱搞,把每个环上的点取出来,类似于缩点的方法.但是忽然感觉dfs能 ...

  5. CodeForces - 1335F Robots on a Grid(拓扑找环+反向dfs/倍增)

    题目链接:点击查看 题目大意:给出一个 n * m 的矩阵,矩阵的每一个格子都有一个颜色,颜色非黑即白,除此之外每个格子还有一个指令,分别为: ' U ':向上一个单位 ' D ':向下一个单位 ' ...

  6. 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)

    找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...

  7. codefores741A Arpa's loud Owf and Mehrdad's evil plan(图找环)

    题意: 对于给定的一个数列a[n],如果现在点i,那么下一个点就在a[i],现在问给定n个点,找到一个最小的t,使得对于从任意一个点x出发,经过t次之后,到达的点y, 使得点y经过t次之后会回到点x. ...

  8. [Noi2008]假面舞会(dfs判环)

    [Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...

  9. P2444 [POI2000]病毒(ACAM上找环)

    LINK 给出一些010101串,问是否存在无限长的某个010101串 使得给定的任何一个010101串都不是它的子串 普通考虑好像不太好弄,我们建出ACAMACAMACAM看看 预处理ed[i]ed ...

最新文章

  1. sysdba登录不需要密码验证?
  2. Json返回时间中出现乱码问题的两种解决方法
  3. 容器私有云和持续发布都要解决哪些基础问题 第一集
  4. 当执行进程ctrl+c关闭不了的时候的解决方法
  5. 树形结构与关系数据库之闭包表
  6. c语言中怎么 写子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
  7. resize属性,使textarea在ff(火狐)中禁止拉伸
  8. 计算机注册表管理,如何打开计算机注册表编辑器
  9. Sqlite优化记录:使用全文索引加快检索速度-转
  10. 计算机微课论文参考文献,关于信息技术论文范文资料 与初中信息技术课堂中微课应用策略有关论文参考文献...
  11. 视频时序与BT1120的关系 FPGA实现BT.1120编码
  12. Promise then的嵌套
  13. linux系统软路由软件,Linux软路由配置
  14. python建筑案例_有哪些关于 Python 在建筑中的应用和教程?
  15. 打造一流软文营销推广平台,看看媒体批发网是如何做的
  16. jspdf添加宋体_JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体乱码解决方案...
  17. 一个假冒的序列号被用来注册Internet Download Manager。IDM正在退出...解决办法
  18. Tomcat优化思路
  19. panada python_Python Pandas
  20. 什么样的女生城府深?

热门文章

  1. mybatis plus 批量保存_mybatis源码分析
  2. Springboot后台管理(CRUD)
  3. android交叉编译libxml2,Openwrt 交叉编译libxml2(示例代码)
  4. LeetCode 82 删除排序链表中的重复元素||-中等
  5. 算法-二分搜索-找出最大值和最小值
  6. matlab gui 密码登录 论文,MATLAB GUI 密码输入
  7. 数据结构与索引-- mysql InnoDB存储引擎索引
  8. 计算机网络----wireshark抓包
  9. 梯度下降:求线性回归
  10. 【NOI2019】回家路线【无后效性dp状态设计】【斜率优化】