题意:

某地沙漠化严重,沙漠里长了很多仙人掌,现在要让你删掉仙人掌的一些边让它的所有连通分量都是树,就完成了沙漠绿化(什么鬼逻辑?)让你计算删边的方案数。

仙人掌是一种特殊的图,它的每一条边只属于1或0条回路。

题解:

画几个仙人掌就能明白,仙人掌就是一棵树上的某些点长出了回路,可以把仙人掌分成若干个回路和不属于回路的边,要把仙人掌删成树不难,每个回路至少删掉一条边,即减掉一种所有回路边都不删的的方案,所有非回路边删或不删均可,假设非回路边有$a_0$个,第i个回路有$a_i$条边$(i=1,2....n)$,容易得出方案数是$2^{a_0}*\prod _{i=1}^{n} 2^{a_i}-1$

难点在于怎样找出仙人掌的所有回路,一种方法是dfs,记录边的深度,一旦从深度高的边dfs到了深度低的边,即找到了一个环,dfs过程中有如下几种情况:

1,dfs到了父亲,不用管,直接continue

2,dfs到了深度比自己浅的点,就是找到了环,环边数为两点深度之差+1,如下图从5到1

3,dfs到了 比自己深度深的点,则是访问到了统计过的环,也不管

4,dfs到了未标记深度的点,将此点深度记为父节点深度+1并从此点开始dfs

此题坑点在于图未必是连通图,需要从每一个未标记深度的点开始dfs

#include<iostream>
#include<vector>
#include<cstring>
#define MOD 998244353
#define LL long long
using namespace std;
LL qpow(LL base,int n){
LL ans=;
while(n){
if(n&)ans=ans*base%MOD;
base=base*base%MOD;
n>>=;
}
return ans;
}
int vis[];
//0代表没访问过 1代表访问过 2代表访问过且已作为环找到过
int depth[];
vector<int> edge[];
vector<int> cnt;
void dfs(int u,int fa,int dpt){
int l=edge[u].size();
depth[u]=dpt;
for(int i=;i<l;i++){
int v=edge[u][i];
if(v==fa || depth[v]>dpt)continue;
//printf("u:%d %d v:%d %d\n",u,dpt,v,depth[v]);
if(depth[v]>= && depth[v]<depth[u]){
cnt.push_back(depth[u]-depth[v]+);
//printf("Bingo%d\n",dpt-depth[v]+1);
//depth[u]=dpt;
}else{
//depth[u]=dpt;
//vis[u]=1;
dfs(v,u,dpt+);
} }
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i=;i<=m;i++){
int a,b;
scanf("%d %d",&a,&b);
edge[a].push_back(b);
edge[b].push_back(a);
}
memset(depth,-,sizeof depth);
// dfs(1,-1,0);
for(int i=;i<=n;i++){
if(depth[i]==-)dfs(i,-,);
}
int sz=cnt.size();
long long ans=;
for(int i=;i<sz;i++){
//printf("%d\n",cnt[i]);
ans=ans*(qpow(,cnt[i])-)%MOD;
m-=cnt[i];
}
ans=ans*qpow(,m)%MOD;
printf("%lld\n",ans);
return ;
}

2019ccpc秦皇岛/Gym102361 F Forest Program 仙人掌上dfs的更多相关文章

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

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

  2. 2019CCPC秦皇岛 F Forest Program

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

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

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

  4. 2019ccpc秦皇岛/Gym102361 I - Invoker dp

    题意: 连续3个特定的按键(在这3个中不要求顺序)能使出某个技能,使出不同技能所需要的按键可以重叠,给你一个技能序列,问你最少花费多少次按键能按顺序使出这些招数. 题解: dp,dp[i][j]代表使 ...

  5. 2019ccpc秦皇岛/Gym102361 D - Decimal 签到

    题意: 给定n,判断1/n是否在十进制下无限循环 题解:判断n的是否包含除2,5以外的因数即可 #include<iostream> #include<cstdio> #inc ...

  6. HDU - 6736 F - Forest Program

    题意 给你n个点m条边,并且保证整个图是仙人掌. 仙人掌:每条边仅属于1条或者0条回路 且无重边和自环 让你删掉一些边使其变成一棵树(拥有点数-1条边) 注意一个点也是森林 图可能是不联通的 思路 考 ...

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

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

  8. 2019-ccpc秦皇岛现场赛

    https://www.cnblogs.com/31415926535x/p/11625462.html 昨天和队友模拟了下今年秦皇岛的区域赛,,,(我全程在演 题目链接 D - Decimal 签到 ...

  9. luogu 2478 [SDOI2010]城市规划 仙人掌上dp.

    LINK:城市规划 以前ls 让写的时候由于看不懂题目+以为在图中的环上dp非常困难所以放弃治疗了. 现在终于能把题目看懂了 泪目... 题目其实就是在说 给出一张图这个有一个非常好的性质 满足每个点 ...

随机推荐

  1. asd的甩锅计划

    asd的甩锅计划 时间限制: 1 Sec  内存限制: 128 MB提交: 177  解决: 19[提交][状态] 题目描述 大家对hdu上面的畅通工程系列一定很熟悉了吧.比如如下一段,就是畅通工程里 ...

  2. CTF | bugku | 字符?正则?

    做题链接 一个详细讲正则的网址1 一个详细讲正则的网址2 代码如下 <?php highlight_file('2.php'); $key='KEY{********************** ...

  3. Ubuntu紫色背景颜色代码

    前言 我一直很中意Ubuntu的紫,记录一下颜色代码以免忘了! so Ubuntu紫色背景颜色代码background=300924 red = 48 green 9 blue  36

  4. selenium2-java 浏览器cookie的获取

    //成功登陆后增加如下代码        File cookieFile = new File("C:\\tmp\\tangdai.cookie.txt");           ...

  5. Python 进阶_OOP 面向对象编程_self 的实例绑定

    目录 目录 self 和绑定 调用非绑定的方法 self 和绑定 在 Python 中 self 变量是特殊的, 其用于在实例方法中引用该方法所绑定的实例, 换句话说就是 Python 在实例化对象时 ...

  6. iview+vue 表格中添加图片

    开门见山,话不多说,要在表格中添加图片,可以使用td: <table " width="100%"> <tr class="tr-style ...

  7. CSS 6种完全居中最佳实践(整理)

    2016年4月28日 1.最佳法: .Absolute-Center { width: 50%; height: 50%; overflow: auto; margin: auto; position ...

  8. mybatis的一些小细节

    Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. ...

  9. Mutable and Immutable Variables in Python

    本文解决python中比较令人困惑的一个小问题:传递到函数中的参数若在函数中进行了重新赋值,对于函数外的原变量有何影响.看一个小栗子: def fun(a): a=2 return a=1 fun(a ...

  10. pyppeteer模块的基本使用

    pyppeteer模块的基本使用 引言 Selenium 在被使用的时候有个麻烦事,就是环境的相关配置,得安装好相关浏览器,比如 Chrome.Firefox 等等,然后还要到官方网站去下载对应的驱动 ...