hdu6736(寻找最小环)
时间:2019-09-28
本文章向大家介绍hdu6736(寻找最小环),主要包括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 */
原文地址:https://www.cnblogs.com/carcar/p/11604445.html
- 如何在js中将统计代码图标隐藏
- 警惕IT黑洞
- 这或许是对小白最友好的python入门了吧——17,while循环
- 泛型介绍(接上一篇,具体的事例随后呈上)
- PHP高级编程之守护进程
- 看到他我一下子就悟了-- 泛型(2)
- ExtJS4中设置tabpanel的tab高度问题
- Oracle写错误与文件离线
- 看到他我一下子就悟了-- 泛型(1)
- EXTJS4 Grid Filter 插件的使用 与后台数据解析------Extjs 查询筛选功能的实现
- [Java]读取文件方法大全
- WPF Application 类介绍以及怎样修改启动方式
- C#基础知识回顾-- 反射(4)
- C#基础知识回顾-- 反射(3)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- nutz 中 子模块 参数的使用。
- java向mysql插入数据乱码问题解决
- java向数据库中插入中文出现乱码
- Flutter基础widgets教程-FractionallySizedBox篇
- 关于myeclipse控制台输出中文乱码的问题
- nutz 自定义查询 分页 取值
- jquery-uploadifyv3.2.1 文件上传插件 学习
- Flutter基础widgets教程-Icon篇
- Redis:持久化
- Flutter基础widgets教程-IconButton篇
- Flutter基础widgets教程-Image篇
- Go - 学习 grpc.Dial(target string, opts …DialOption) 的写法
- Flutter基础widgets教程-IntrinsicHeight篇
- Flutter基础widgets教程-Baseline篇
- springcloud本地开发的微服务如何调用远程k8s的微服务