[CCPC2019秦皇岛] F. Forest Program
[CCPC2019秦皇岛 F]
Link
https://codeforces.com/gym/102361/problem/F
Description
给定一个仙人掌,删去一些边可以让它变成一个森林(一棵树也是森林),求方案数。 \(n \le 300000, m \le 500000\)
Solution
用 DFS 暴力找环,然后乘法原理算一下即可。注意非环边也会有贡献。
DFS 可以模仿 Tarjan 算法写。
Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 300005;
const int modulo = 998244353;
vector <int> g[N];
int is[N],dis[N];
int n,m,t1,t2,t3,t4;
vector <int> sta,cir;
int qpow(int p,int q)
{
int r=1;
for(;q;p*=p,p%=modulo,q>>=1) if(q&1) r*=p,r%=modulo;
return r;
}
void dfs(int p,int dep)
{
is[p]=2;
dis[p]=dep;
sta.push_back(p);
for(int i=0;i<g[p].size();i++)
{
int q=g[p][i];
if(is[q]==2 && dep-dis[q]>1)
{
cir.push_back(dep+1-dis[q]);
}
else if(is[q]==0)
{
dfs(q,dep+1);
}
}
sta.pop_back();
is[p]=1;
}
signed main()
{
scanf("%I64d%I64d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%I64d%I64d",&t1,&t2);
g[t1].push_back(t2);
g[t2].push_back(t1);
}
for(int i=1;i<=n;i++)
{
if(is[i]==0)
{
dfs(i,1);
}
}
int sum=0,ans=1;
for(int i=0;i<cir.size();i++)
{
ans*=(qpow(2ll,cir[i])-1ll);
ans%=modulo;
ans+=modulo;
ans%=modulo;
sum+=cir[i];
}
ans*=qpow(2ll,m-sum);
ans%=modulo;
printf("%I64d\n",ans);
}
[CCPC2019秦皇岛] F. Forest Program的更多相关文章
- 2019CCPC秦皇岛 F Forest Program
队友过的:https://blog.csdn.net/liufengwei1/article/details/101632506 Forest Program Time Limit: 2000/100 ...
- HDU6736 2019CCPC秦皇岛赛区 F. Forest Program
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6736思路:dfs+栈 判环 设图中环的大小分别为 c1, c2, ..., ck,不属 ...
- 2019ccpc秦皇岛/Gym102361 F Forest Program 仙人掌上dfs
题意: 某地沙漠化严重,沙漠里长了很多仙人掌,现在要让你删掉仙人掌的一些边让它的所有连通分量都是树,就完成了沙漠绿化(什么鬼逻辑?)让你计算删边的方案数. 仙人掌是一种特殊的图,它的每一条边只属于1或 ...
- 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program(DFS计算图中所有环的长度)
题目链接:https://codeforces.com/gym/102361/problem/F 题意 有 \(n\) 个点和 \(m\) 条边,每条边属于 \(0\) 或 \(1\) 个环,问去掉一 ...
- HDU - 6736 F - Forest Program
题意 给你n个点m条边,并且保证整个图是仙人掌. 仙人掌:每条边仅属于1条或者0条回路 且无重边和自环 让你删掉一些边使其变成一棵树(拥有点数-1条边) 注意一个点也是森林 图可能是不联通的 思路 考 ...
- [CCPC2019秦皇岛] E. Escape
[CCPC2019秦皇岛E] Escape Link https://codeforces.com/gym/102361/problem/E Solution 观察到性质若干然后建图跑最大流即可. 我 ...
- Forest Program(2019ccpc秦皇岛F)
题:http://acm.hdu.edu.cn/showproblem.php?pid=6736 题意:删掉一些边使得图不存在点双,求方案数. 分析:若一条边不属于点双,那么这条边有删和不删俩种选择, ...
- Forest Program(dfs方法---树上的环)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=6736 沙漠中的每一个连通块都是一棵仙人掌:一个连通块是一棵仙人掌当且仅当连通块中不存在重边和自环,并且每一 ...
- Codeforces Gym 102361A Angle Beats CCPC2019秦皇岛A题 题解
题目链接:https://codeforces.com/gym/102361/problem/A 题意:给定二维平面上的\(n\)个点,\(q\)次询问,每次加入一个点,询问平面上有几个包含该点的直角 ...
随机推荐
- java面试必问问题总结
1. 自我介绍 2. get跟load的区别 3. 什么是重载,什么是重写 4. HashTable跟HashMap的区别 5. Jsp九大隐式对象 6. Forword和redirect 的区别 7 ...
- 初始socket编程
服务端语法 import socket # 导入套接字模块# 生成一个socket对象进行网络编程操作server = socket.socket(family=socket.AF_INET, typ ...
- Ceph集群网络切换
背景:需要对已部署好的Ceph集群切换网络,包含包含公共网络和集群网络 1 关闭所有mon节点的mon服务并修改服务器IP systemctl stop ceph-mon@storage01.serv ...
- 【笔记】机器学习 - 李宏毅 - 1 - Introduction & next step
Machine Learning == Looking for a Function AI过程的解释:用户输入信息,计算机经过处理,输出反馈信息(输入输出信息的形式可以是文字.语音.图像等). 因为从 ...
- dp --A - Super Jumping! Jumping! Jumping!
A - Super Jumping! Jumping! Jumping! Nowadays, a kind of chess game called “Super Jumping! Jumping! ...
- centos-python3.5安装
python版本:Python-3.5.5.tgz tar -xvf Python-3.5.5.tgz cp Python-3.5.5 /usr/local cd /usr/local/Python- ...
- CentOS 7 版本配置salt-master salt-minion
下载saltshaker_api.git [root@linux-node1 salt]# cd $HOME [root@linux-node1 salt]# git clone https://gi ...
- KiKi's K-Number HDU - 2852 树状数组+二分
#include<iostream> #include<cstring> using namespace std; ; int tr[N]; int lowbit(int x) ...
- easyui datagrid设置排序
sortable="true" order="desc" 或者 sortable:true,order:'desc'
- 02:QT的第一个程序
新建项目,有这么几个文件: main.cpp //一个main函数,作为应用程序的入口函数 mainwindow.cpp mainwindow.h untit ...