P1656 炸铁路

    • 81通过
    • 286提交
  • 题目提供者kkksc03
  • 标签图论搜索/枚举洛谷原创
  • 难度普及+/提高

提交该题 讨论 题解 记录

最新讨论

  • 暂时没有讨论

题目描述

因为某国被某红色政权残酷的高压暴力统治。美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵。

该国有n个城市,这些城市以铁路相连。任意两个城市都可以通过铁路直接或者间接到达。

uim发现有些铁路被毁坏之后,某两个城市无法互相通过铁路到达。这样的铁路就被称为key road。

uim为了尽快使该国的物流系统瘫痪,希炸毁铁路,已达到存在某两个城市无法互相通过铁路到达的效果。

然而,只有一发炮弹(美国国会不给钱了)。所以,他能轰炸那一条铁路呢?

输入输出格式

输入格式:

第一行n,m(1<=n<=150, 1<=m<=5000),分别表示有n个城市,总共m条铁路。

以下m行,每行两个整数a, b,表示城市a和城市b之间有铁路直接连接。

输出格式:

输出有若干行。

每行包含两个数字a,b(a<b),表示<a,b>是key road。

请注意:输出时,所有的数对<a,b>必须按照a从小到大排序输出;如果a相同,则根据b从小到大排序。

输入输出样例

输入样例#1:

6 6
1 2
2 3
2 4
3 5
4 5
5 6
输出样例#1:

1 2
5 6

题解:

数据太水了,spfa枚举边,直接判断是不是桥

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=;
const int M=;
struct node{
int v,next;
}e[M<<];
int a[M],b[M],head[N],dis[N],n,m,tot,cnt,jx,jy;
bool vis[N];
void add(int x,int y){
e[++tot].v=y;
e[tot].next=head[x];
head[x]=tot;
}
bool judge(int u,int v){
return (u==jx&&v==jy)|(u==jy&&v==jx);
}
bool spfa(int S){
memset(vis,,sizeof vis);
memset(dis,,sizeof dis);
queue<int>q;
vis[S]=;
dis[S]=;
q.push(S);
while(!q.empty()){
int p=q.front();q.pop();
vis[p]=;
for(int i=head[p];i;i=e[i].next){
if(judge(p,e[i].v)) continue;
int v=e[i].v;
if(!dis[v]){
dis[v]=dis[p]+;
if(!vis[v]){
vis[v]=;
q.push(v);
}
}
}
}
for(int i=;i<=n;i++) if(!dis[i]) return ;
return ;
}
#define pir pair<int,int>
pir ans[M];
bool cmp(const pir &p,const pir &q){
if(p.first==q.first) return p.second<q.second;
return p.first<q.first;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++) scanf("%d%d",&a[i],&b[i]),add(a[i],b[i]),add(b[i],a[i]);
//for(int i=1,x,y;i<=m;i++) scanf("%d%d",&x,&y),add(x,y),add(y,x);
/*for(int i=1;i<=n;i++){
jx=i;
for(int j=head[i];j;j=e[j].next){
//if(i==e[i].v) continue;
jy=e[i].v;
if(spfa(jy)) ans[++cnt]=make_pair(jx,jy);
}
}*/
for(int i=;i<=m;i++){
jx=a[i];
jy=b[i];
//if(mark[jx]||mark[jy]) continue;
if(jx>jy) swap(jx,jy);
if(spfa(jx)) {ans[++cnt]=make_pair(jx,jy);continue;}
if(spfa(jy)) {ans[++cnt]=make_pair(jx,jy);continue;}
}
sort(ans+,ans+cnt+,cmp);
for(int i=;i<=cnt;i++) printf("%d %d\n",ans[i].first,ans[i].second);
return ;
}

P1656 炸铁路的更多相关文章

  1. 洛谷 P1656 炸铁路

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

  2. 洛谷—— P1656 炸铁路

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

  3. 洛谷P1656 炸铁路

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

  4. P1656 炸铁路 洛谷

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

  5. 洛谷P1656 炸铁路 (求割边)

    用tarjan变种求割边的模板题 其实还可以求出所有的边双(用栈),但本题不需要求. 1 #include<bits/stdc++.h> 2 using namespace std; 3 ...

  6. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  7. Tarjan求割点(割顶) 割边(桥)

    割点的定义: 感性理解,所谓割点就是在无向连通图中去掉这个点和所有和这个点有关的边之后,原先连通的块就会相互分离变成至少两个分离的连通块的点. 举个例子: 图中的4号点就是割点,因为去掉4号点和有关边 ...

  8. 200行代码搞定炸金花游戏(PHP版)

    <?php/* * 游戏名称:炸金花(又名三张牌.扎金花) * 开发时间:2009.1.14 * 编 程:多菜鸟 * 来 源:http://blog.csdn.net/kingerq/archi ...

  9. XidianOJ 1044 炸金花

    题目描述 炸金花是一个风靡全球的扑克游戏,不少人因为这个游戏发了家,而更多的人则输得倾家荡产.为了帮助赌徒们戒掉它,现在决定派你去写一个程序,帮助赌徒们更好的认识这个游戏. 炸金花在这里被简化成这样一 ...

随机推荐

  1. 字符编码方式ASCII、Unicode、UTF-8

    一.ASCII 1.介绍 即American Standard Code for Information Interchange(美国信息交换标准代码),是基于拉丁字母的,主要用于显示现代英语和其他西 ...

  2. 个人觉得比较好用的chrome插件

    印象笔记·悦读 "悦读"可使博文.文章和网页变得简明而又易于阅读.将其保存至印象笔记以便随时随地阅读. Anything to QRcode 通过右键菜单或地址栏按钮将当前页面地址 ...

  3. CAD使用SetxDataString写数据(网页版)

    主要用到函数说明: MxDrawEntity::SetxDataString 写一个字符串扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据名称 ...

  4. 梦想CAD控件安卓交互绘图

    在cad使用过程中,动态绘制的使用会使我们绘图速度大大加快.在此演示中,我们绘制了直线.多段线.点.样条线.圆.圆弧.椭圆.椭圆弧等实体. 用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明 ...

  5. UVA - 10048 Audiophobia(Floyd求路径上最大值的最小)

    题目&分析: 思路: Floyd变形(见上述紫书分析),根据题目要求对应的改变判断条件来解题. 代码: #include <bits/stdc++.h> #define inf 0 ...

  6. Python学习-字符串函数操作2

    字符串函数操作 find( sub, start=None, end=None):从左到右开始查找目标子序列,找到了结束查找返回下标值,没找到返回 -1 sub:需要查找的字符串 start=None ...

  7. 集合:Iterator

    why ? when ? how ? what ? 为什么需要集合呢? 在数据结构中链表.树.堆等一些操作都是由我们自己写的,这些操作是不是可以提取出来,以后要用就直接拿来用就好,这样非常方便. Ja ...

  8. swing中的按钮事件

    package pack2; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax ...

  9. LES on MCT

  10. PAT 1125 Chain the Ropes

    Given some segments of rope, you are supposed to chain them into one rope. Each time you may only fo ...