题意

给你n个点m条边,并且保证整个图是仙人掌。

仙人掌:每条边仅属于1条或者0条回路

且无重边和自环

让你删掉一些边使其变成一棵树(拥有点数-1条边)

注意一个点也是森林

图可能是不联通的

思路

考虑环,显然一个环可以随便去掉几条边但是至少一条(也就是说不能是\(C_n^0\))\(2^{x}\)-1,然后考虑非环那么共有m-(所有环的边数),然后可以随便去除边共\(2^{m-cnt}\)

在找环时,求环的边数见\(dfs\)

#include<iostream>
#include<algorithm> using namespace std; #define int long long
const int maxn=3e5+10;
int dep[maxn],cnt;
vector<int>edge[maxn];
const int mod=998244353;
int ans;
int qp(int a,int b) {
int res=1;
while(b) {
if(b&1)res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
} void dfs(int u,int fa) {
dep[u]=dep[fa]+1;
for(int i=0; i<edge[u].size(); ++i) {
int v=edge[u][i];
if(v==fa)continue;
if(!dep[v])dfs(v,u);
else if(dep[u]>dep[v]){
ans=(ans%mod*(qp(2,dep[u]-dep[v]+1)-1)%mod)%mod;
cnt+=dep[u]-dep[v]+1;
}
}
} signed main() {
int n,m;
while(~scanf("%lld%lld",&n,&m)) {
cnt=0;
for(int i=1; i<=n; ++i)dep[i]=0,edge[i].clear();
for(int i=1; i<=m; ++i) {
int u,v;
scanf("%lld%lld",&u,&v);
edge[u].push_back(v);
edge[v].push_back(u);
}
ans=1;
for(int i=1; i<=n; ++i) {
if(!dep[i])dfs(i,0);
}
ans=(ans%mod*(qp(2,m-cnt))%mod)%mod;
printf("%lld\n",ans);
} }

HDU - 6736 F - Forest Program的更多相关文章

  1. 2019CCPC秦皇岛 F Forest Program

    队友过的:https://blog.csdn.net/liufengwei1/article/details/101632506 Forest Program Time Limit: 2000/100 ...

  2. HDU6736 2019CCPC秦皇岛赛区 F. Forest Program

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6736思路:dfs+栈 判环           设图中环的大小分别为 c1, c2, ..., ck,不属 ...

  3. [CCPC2019秦皇岛] F. Forest Program

    [CCPC2019秦皇岛 F] Link https://codeforces.com/gym/102361/problem/F Description 给定一个仙人掌,删去一些边可以让它变成一个森林 ...

  4. 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program(DFS计算图中所有环的长度)

    题目链接:https://codeforces.com/gym/102361/problem/F 题意 有 \(n\) 个点和 \(m\) 条边,每条边属于 \(0\) 或 \(1\) 个环,问去掉一 ...

  5. 2019ccpc秦皇岛/Gym102361 F Forest Program 仙人掌上dfs

    题意: 某地沙漠化严重,沙漠里长了很多仙人掌,现在要让你删掉仙人掌的一些边让它的所有连通分量都是树,就完成了沙漠绿化(什么鬼逻辑?)让你计算删边的方案数. 仙人掌是一种特殊的图,它的每一条边只属于1或 ...

  6. 【数位DP】 HDU 4734 F(x)

    原题直通车:HDU 4734 F(x) 题意:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1, 求0.....B中F[x]<=F[A ...

  7. Forest Program(2019ccpc秦皇岛F)

    题:http://acm.hdu.edu.cn/showproblem.php?pid=6736 题意:删掉一些边使得图不存在点双,求方案数. 分析:若一条边不属于点双,那么这条边有删和不删俩种选择, ...

  8. hdu 4941 Magical Forest

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4941 Magical Forest Description There is a forest can ...

  9. Forest Program(dfs方法---树上的环)

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=6736 沙漠中的每一个连通块都是一棵仙人掌:一个连通块是一棵仙人掌当且仅当连通块中不存在重边和自环,并且每一 ...

随机推荐

  1. xargs命令学习,于阮一峰博客

    一.标准输入与管道命令 Unix 命令都带有参数,有些命令可以接受"标准输入"(stdin)作为参数. $ cat /etc/passwd | grep root 上面的代码使用了 ...

  2. 大神Java8写了一段逻辑,我直呼看不懂

    业务背景 首先,业务需求是这样的,从第三方电商平台拉取所有订单,然后保存到公司自己的数据库,需要判断是否有物流信息,如果有物流信息,还需要再进行上传. 而第三方接口返回的数据是 JSON 格式的,其中 ...

  3. python中绑定码云仓库

    1.File——Settings——Version Control——Git——输入git安装路径下bin下的git.exe路径——点击后面的Test测试一下,弹出版本点击ok即可 2.点击工具栏中的 ...

  4. oracle之dblink

    当用户要跨本地Oracle数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据.下面讲介绍 ...

  5. [剑指Offer]33-根据后序序列判断是否能组成BST

    题目 如题. 题解 从序列第一个大于根节点的值往后都是右子树,判断右子树是否都大于根节点. 然后递归判断左右子树是否是BST 代码 class TreeNode { int val = 0; Tree ...

  6. IDEA使用maven搭建SSM框架整合项目(超级详细,值得一看)

    目录 温馨提示 简单介绍下SSM 搭建过程 一.框架介绍 二.下载Maven 三.创建Maven项目 四.Maven工程需要引入的Jar 包 五.整合SSM框架.需要的相关配置文件配置项目 六.工程导 ...

  7. 原生post请求

    ajax: function(opt) { opt = opt || {}; opt.method = opt.method.toUpperCase() || 'POST'; opt.url = op ...

  8. 虚拟机系列 | JVM类加载机制

    本文源码:GitHub·点这里 || GitEE·点这里 一.类加载简介 类的加载机制是指把编译后的.class类文件的二进制数据读取到内存中,并为之创建一个java.lang.Class对象,用来封 ...

  9. Java Web学习(十)Java拦截器

    文章更新时间:2020/04/07 一.引言 既然要用拦截器,首先先得简单了解一下什么是拦截器: 概念:java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Actio ...

  10. [安洵杯 2019]iamthinking&&thinkphp6.0反序列化漏洞

    [安洵杯 2019]iamthinking&&thinkphp6.0反序列化漏洞 刚开始是403,扫描以下目录,扫描到三个目录. [18:06:19] 200 - 1KB - /REA ...