洛谷P1656 炸铁路 (求割边)
用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 炸铁路 (求割边)的更多相关文章
- 洛谷 P1656 炸铁路
P1656 炸铁路 题目提供者kkksc03 标签图论搜索/枚举洛谷原创 难度普及/提高- 题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵 ...
- 洛谷—— P1656 炸铁路
P1656 炸铁路 题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵. 该国有n个城市,这些城市以铁路相连.任意两个城市都可以通过铁路直接或 ...
- 洛谷P1656 炸铁路
题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵. 该国有n个城市,这些城市以铁路相连.任意两个城市都可以通过铁路直接或者间接到达. uim ...
- P1656 炸铁路
P1656 炸铁路 81通过 286提交 题目提供者kkksc03 标签图论搜索/枚举洛谷原创 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 因为某国被某红色政权残酷 ...
- 多项式求逆元详解+模板 【洛谷P4238】多项式求逆
概述 多项式求逆元是一个非常重要的知识点,许多多项式操作都需要用到该算法,包括多项式取模,除法,开跟,求ln,求exp,快速幂.用快速傅里叶变换和倍增法可以在$O(n log n)$的时间复杂度下求出 ...
- P1656 炸铁路 洛谷
https://www.luogu.org/problem/show?pid=1656 题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵. ...
- 【洛谷4238】 多项式求逆(NTT,分治)
前言 多项式求逆还是爽的一批 Solution 考虑分治求解这个问题. 直接每一次NTT一下就好了. 代码实现 #include<stdio.h> #include<stdlib.h ...
- 洛谷.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\ ...
- 【洛谷p1981】表达式求值
题前废话: 咱也不知道咱写了个什么神奇的代码导致_rqy都看不明白它是怎么re掉的, 代码的大致思路是这样的:对于这样一个中缀表达式,先转化成它的后缀表达式的形式,然后利用P1449 后缀表达式 这道 ...
随机推荐
- 修改 hosts
不会牛逼操作 -1. 位置.格式 所有系统都差不多,都是 啥啥/etc/hosts 这样的 . 具体去查即可 . 格式: ip + 域名 域名不能含有通配符 hosts 可以绕过 dns 解析,直接访 ...
- JDBC与ODBC的区别
JDBC简介JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,它是Java十三个规范之一.可以为多种关系数据库提供统一访 ...
- eplan中数据库运行提速
access,sql,是指部件库的存储方式,eplan支持两种方式即Microsoft Office access,Microsoft SQL Server,可以通过这两种方式打开部件库,如果要打开数 ...
- 用JavaScript写一个能开始和暂停的时钟
//sScriptvar showTime = document.getElementById('seconds') var id =0 function fn(){ var i = 0 var s ...
- 使用 Java 操作 Redis
Jedis 1. 概述 Jedis 是一款使用 Java 操作 Redis 的工具,有点类似于 JDBC 2. 引入依赖 <dependency> <groupId>redis ...
- Luogu2801 教主的魔法 (分块)
与hzw的分块2类似,放vector排序 #include <iostream> #include <cstdio> #include <cstring> #inc ...
- Elasticsearch-Kibana-学习笔记
1.背景 1.1 简介 Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据具有搜索.分析和探索的能力.充分利用Elasticsearch的水平伸缩性, ...
- UI自动化框架搭建之Python3
UI自动化框架搭建--unittest 使用的代码是Python3版本,与时俱进哈哈 解释一下我的框架目录接口(每个人框架的目录接口不一样,根据实际要求) common目录:公共模块,这个地方可以存放 ...
- 👍CleanShot X 3.1.1 破解版 (超强屏幕截图录像工具) (TNT + 免激活)
软件语言为ENGLISH,英文不好的劝退! 软件介绍/功能 CleanShot X 3 是一款Mac超强截图以及屏幕录制工具.支持:区域截图.窗口截图.滚动截图.延时截图.屏幕录制.贴图.截图时隐藏桌 ...
- java方法---递归
java方法递归 1.什么是递归 就是自己调用自己: 2.递归结构的两个部分 递归头:什么时候不调用自身方法.如果仅有头,将陷入死循环.递归体:什么时候需要调用自身方法.