用tarjan变种求割边的模板题

其实还可以求出所有的边双(用栈),但本题不需要求。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1e5+10;
4 int head[N],nxt[N<<1],to[N<<1],tot;
5 pair<int,int> edge[N];
6 int dfn[N],low[N],top/*st[N]*/;
7 int cnt,idx,anscnt=0/*bel[N]*/;
8 //st是用来提取连通块的栈
9 //bel表示每个点所属连通块(这道题不需要用)
10
11 void add(int a,int b){
12 nxt[++tot]=head[a];head[a]=tot;to[tot]=b;
13 nxt[++tot]=head[b];head[b]=tot;to[tot]=a;
14 }
15
16 bool cmp(pair<int,int>x,pair<int,int>y){
17 if(x.first==y.first) return x.second<y.second;
18 else return x.first<y.first;
19 }
20
21 void dfs(int u,int fa){
22 low[u]=dfn[u]=++cnt;
23 //st[++top]=u;
24 for(int i=head[u];i;i=nxt[i]){
25 int v=to[i];
26 if(v!=fa){
27 if(!dfn[v]){//v没有被访问过
28 dfs(v,u);
29 low[u]=min(low[u],low[v]);
30 if(low[v]>dfn[u])//是割边
31 edge[anscnt++]=make_pair(min(u,v),max(u,v));//存入割边
32 }
33 else low[u]=min(low[u],dfn[v]);
34 //v被访问过了,更新u的low值
35 }
36 /*if(low[u]==dfn[u]){ 用来求边双连通分量
37 int v;++idx;
38 do{
39 v=st[top--];
40 bel[v]=idx;
41 }while(v!=u);
42 }*/
43 }
44 }
45
46 int main(){
47 int n,m;
48 scanf("%d%d",&n,&m);
49 for(int i=1;i<=m;i++){
50 int a,b;
51 scanf("%d%d",&a,&b);
52 add(a,b);
53 }
54 for(int i=1;i<=n;i++)
55 if(!dfn[i]) dfs(i,0);
56 sort(edge,edge+anscnt,cmp);//按照题目要求给答案排序
57 for(int i=0;i<anscnt;i++){
58 int a=edge[i].first,b=edge[i].second;
59 printf("%d %d\n",a,b);
60 }
61 }

洛谷P1656 炸铁路 (求割边)的更多相关文章

  1. 洛谷 P1656 炸铁路

    P1656 炸铁路 题目提供者kkksc03 标签图论搜索/枚举洛谷原创 难度普及/提高- 题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵 ...

  2. 洛谷—— P1656 炸铁路

    P1656 炸铁路 题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵. 该国有n个城市,这些城市以铁路相连.任意两个城市都可以通过铁路直接或 ...

  3. 洛谷P1656 炸铁路

    题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵. 该国有n个城市,这些城市以铁路相连.任意两个城市都可以通过铁路直接或者间接到达. uim ...

  4. P1656 炸铁路

    P1656 炸铁路 81通过 286提交 题目提供者kkksc03 标签图论搜索/枚举洛谷原创 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 因为某国被某红色政权残酷 ...

  5. 多项式求逆元详解+模板 【洛谷P4238】多项式求逆

    概述 多项式求逆元是一个非常重要的知识点,许多多项式操作都需要用到该算法,包括多项式取模,除法,开跟,求ln,求exp,快速幂.用快速傅里叶变换和倍增法可以在$O(n log n)$的时间复杂度下求出 ...

  6. P1656 炸铁路 洛谷

    https://www.luogu.org/problem/show?pid=1656 题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵. ...

  7. 【洛谷4238】 多项式求逆(NTT,分治)

    前言 多项式求逆还是爽的一批 Solution 考虑分治求解这个问题. 直接每一次NTT一下就好了. 代码实现 #include<stdio.h> #include<stdlib.h ...

  8. 洛谷.4238.[模板]多项式求逆(NTT)

    题目链接 设多项式\(f(x)\)在模\(x^n\)下的逆元为\(g(x)\) \[f(x)g(x)\equiv 1\ (mod\ x^n)\] \[f(x)g(x)-1\equiv 0\ (mod\ ...

  9. 【洛谷p1981】表达式求值

    题前废话: 咱也不知道咱写了个什么神奇的代码导致_rqy都看不明白它是怎么re掉的, 代码的大致思路是这样的:对于这样一个中缀表达式,先转化成它的后缀表达式的形式,然后利用P1449 后缀表达式 这道 ...

随机推荐

  1. Thread类的常用方法_获取线程名称的方法和Thread类的常用方法_设置线程名称的方法

    构造方法: public Thread();分配一个新的线程对象 public Thread(String name);分配一个指定名字的新的线程对象 public Thread(Runnable t ...

  2. 开源MyBatisGenerator组件源码分析

    开源MyBatisGenerator组件源码分析 看源码前,先了解Generator能做什么? MyBatisGenerator是用来生成mybatis的Mapper接口和xml文件的工具,提供多种启 ...

  3. linux安全之网络设置

    可以通过/etc/sysctl.conf控制和配置Linux内核及网络设置. # 避免放大攻击 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 开启恶意icmp错 ...

  4. Mybatis的使用(1)

    1:新建maven项目,file->project->maven 2:在建好的maven项目中,打开pom.xml文件,加入mybatis所需要的依赖: <!-- mybatis核心 ...

  5. ansible一键安装GreatSQL并构建MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 利用ansible一键安装GreatSQL并完成MGR部署. 本次介绍如何利用ansible一键安装GreatSQL并完成 ...

  6. 两天时间学习的html的知识笔记

    坚持努力背 特殊字符: 空格符  < 小于号 <> 大于号 >& 和号 &¥ 人民币 ¥  版权 ©R 注册商标 ®. 摄氏度 ° 正负号 ±X 乘号 × 除号 ...

  7. 处理化学SDF文件出现乱码的解决经验

    近期,在VS2019中用WTL编写一个处理化学SDF文件的程序,遇到多处数据出现乱码的问题,典型一处情况如下:在原始SDF文件的一个字段中,有个形如下面的文字信息: https://product.p ...

  8. vue中vuex实现持久化的几种方法

    前提:大家都知道vuex真的数据共享是不持久的,例如登录后一刷新,state中存的token就会消失,导致你需要再次进行登录操作 在这给大家列出几种解决方案: 第一种(也是一些项目中常使用的):使用缓 ...

  9. LuoguP1725 琪露诺 (动态规划)

    \(单调队列\) 或 \(堆\) 优化 #include <iostream> #include <cstdio> #include <cstring> #incl ...

  10. 图解OSI七层模型

    七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系.它是一个七层的.抽象的模型体 ...