hdu6736(寻找最小环)
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6736
题意:
在给定图中寻找所有最小环
保证不存在一条边经过两个简单环
数据范围:
$1\leq n \leq 300 000$
$1\leq m \leq 500 000$
分析:
每次遍历到某个点时入栈,遍历结束时出栈
依次把点加入栈中,如果下一个点在栈中,那么这里肯定构成了一个简单环
只需要计算栈中到达下一点元素的数量就行,不需要出栈
比赛的时候没想到这个方法,队友给出正确思路,但是实现时没写好,背锅
AC代码:
#include<bits/stdc++.h>
#define ll long long
#define pic pair<int,char>
using namespace std;
const int maxn=3e5+7;
const int mod= 998244353;
vector<int>ve[maxn];
int ins[maxn],top,sk[maxn],n,m,vis[maxn];
ll ans=1;
ll qpow(int a,int b){
ll res=1,k=a;
while(b){
if(b&1)res=res*k%mod;
k=k*k%mod;
b/=2;
}
return res;
}
void dfs(int x,int f){
sk[++top]=x;
ins[x]=1;
vis[x]=1;
for(int i=0;i<ve[x].size();i++){
int v=ve[x][i];
if(vis[v]==0){
dfs(v,x);
}else if(v!=f&&ins[v]){
int res=1;
int zz=top;
while(1){
zz--;
res++;
// cout<<zz<<endl;
if(sk[zz]==v)break;
}
if(res){
// cout<<res<<endl;
m-=res;
ans=(qpow(2,res)-1+mod)%mod*ans%mod;
}
}
}
ins[sk[top]]=0;
--top;
}
int main(){
// cout<<qpow(2,10)<<endl;
while(scanf("%d %d",&n,&m)==2){ for(int i=1;i<=n;i++)ve[i].clear();
top=0;
memset(ins,0,sizeof(ins));
memset(vis,0,sizeof(vis));
for(int i=1;i<=m;i++){
int a,b;
scanf("%d %d",&a,&b);
ve[a].push_back(b);
ve[b].push_back(a);
}
for(int i=1;i<=n;i++){
if(vis[i]==0){
dfs(i,0);
}
} ans=qpow(2,m)*ans%mod;
printf("%lld\n",ans);
ans=1;
}
return 0;
}
/*
7 9
1 2 1 3 2 3 3 4 4 5 5 3 3 6 3 7 6 7
*/
hdu6736(寻找最小环)的更多相关文章
- 信息传递(NOIP2015)(寻找最小环。。)
原题传送门 这是一道寻找最小环的题目. 在做的时候给每一个点染色.. 防止再做已经搜过的点(优化) v[]表示是否访问的过,以及第一次访问该点的时间. u[]表示染色.. 这道题还可以用拓补排序做. ...
- floyd算法之最小环问题
最小环问题:都比较容易得到从u 到 v 经过中间某一些结点的最短路,但是我们得确保回来的时候,不能经过那些结点,这样我们就需要改一下floyd算法了 进而我们想到用Floyd算法.我们知道,Floyd ...
- code4511 信息传递
寻找最小环 #include <cstdio> #include <cstring> #include <iostream> using namespace std ...
- Floyd —Warshall(最短路及其他用法详解)
一.多元最短路求法 多元都求出来了,单源的肯定也能求. 思想是动态规划的思想:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设Dis(A ...
- floyd离散,最小环
Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K& ...
- Floyd最小环
本文转自这里 最小环:从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的. 怎样求最小环呢? 1传统的解决方法(dijkstra): 任意一个最小环环的权值, ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- floyd求最小环
;i<=n;i++) ;j<=n;j++) g[i][j]=g[j][i]=dis[i][j]=dis[j][i]=inf; ;i<=m;i++){ int u,v,w;scanf( ...
- 拓扑_dfs——找最小环
今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹). 这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话 ...
随机推荐
- (十七)Hibnernate 和 Spring 整合
一.Hibnernate 和 Spring结合方案: 方案一: 框架各自使用自己的配置文件,Spring中加载Hibernate的配置文件. 方案二: 统一由Spring的配置来管理.(推荐使用 ...
- (二)Lucene之根据关键字搜索文件
前提:在使用lucene进行搜索的时候,必须先生成索引文件,即必须先进行上一章节的案例,生成索引文件如下: 该索引文件为"segments"开头,如果没有该文件则说明没有索引文件则 ...
- cnn健康增胖和调理好身体
吃不胖,其实大部分情况是消化系统不好,大部分食物都没有被身体吸收就被排掉了. 1,改善肠胃消化功能: 每天早上一杯全脂鲜牛奶(或者羊奶), 每天晚上一杯酸奶 ps:白天和鲜牛奶可以激发肠胃的消化能力. ...
- 史上最简单Git入门教程
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 工作原理 / 流程: Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remo ...
- Visual Stdio C++ 编译常见问题
1. new 数组出现崩溃 new 数组时数组下标出现负值,但未做出错处理: new数组,数组字节数大于4MB的时候有可能出现crash! 解决办法: 加入 try catch 后,这样的错误几乎没 ...
- R语言学习笔记:glue包实现变量传参
glue包介绍 glue包可用于自定义变量,然后通过传参的方式,对字符串部分内容进行自适应修改. 例如:可将日期赋值为:date = as.Date("2019-12-05"),然 ...
- clipboard兼容各个浏览器,不需要设置权限
解决方案:用clipboard.js插件 注意要引用clipboard.js文件 案例: 将文本赋值给剪切板 <button class="btn">Copy</ ...
- Kmalloc可以申请的最大内存
Kmalloc申请的最大内存 以前虽然读过源码,但是对于它的申请上限确实没注意过.下面分析下,下面是kmalloc的源码. 可以看出,如果想知道kmalloc能申请的范围,需要跳转到<linux ...
- 【vue开发】vue指令Vue.directive使用教程
1.指令的注册 指令跟组件一样需要注册才能使用,同样有两种方式,一种是全局注册: ? 1 2 3 4 5 Vue.directive('dirName',function(){ //定义指令 ...
- Elasticsearch 9300无法访问,客户端出现NoNodeAvailableException[None of the configured nodes are available: [{#transport#‐1}{exvgJLR‐RlCNMJy‐hzKtnA}
1. 进入容器 docker exec ‐it ID /bin/bash 2. 拷贝配置文件到宿主机 docker cp ID:/usr/share/elasticsearch/config/el ...