• P1656 炸铁路 洛谷


    https://www.luogu.org/problem/show?pid=1656

    题目描述

    因为某国被某红色政权残酷的高压暴力统治。美国派出将军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

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdio>
     5 #define maxn 1e6
     6 
     7 using namespace std;
     8 
     9 int n,m,tot,cnt;
    10 int x[5005],y[5005];
    11 bool vis[5005];
    12 int map[5005][5005];
    13 struct node
    14 {
    15     int a,b;
    16 }ans[5005];
    17 
    18 bool cmp(node aa,node bb)
    19 {
    20     if(aa.a!=bb.a)
    21         return aa.a<bb.a;
    22     else
    23         return aa.b<bb.b;
    24 }
    25 
    26 bool DFS(int from)
    27 {
    28     vis[from]=1;
    29     for(int i=1;i<=n;i++)
    30     {
    31         if(!vis[i]&&(map[from][i]||map[i][from]))
    32         {
    33             cnt++;
    34             DFS(i);
    35         }
    36     }
    37     return cnt==n-1;
    38 }
    39 
    40 int main()
    41 {
    42     scanf("%d%d",&n,&m);
    43     for(int i=1;i<=m;i++)
    44     {
    45         cin>>x[i]>>y[i];
    46         map[x[i]][y[i]]=map[y[i]][x[i]]=1;
    47     }
    48     
    49     for(int i=1;i<=m;i++)
    50     {
    51         cnt=0;
    52         memset(vis,0,sizeof(vis));
    53         map[x[i]][y[i]]=map[y[i]][x[i]]=0;
    54         if(!DFS(1))
    55         {
    56             ans[++tot].a=min(x[i],y[i]);
    57             ans[tot].b=max(x[i],y[i]);
    58         }
    59         map[x[i]][y[i]]=map[y[i]][x[i]]=1;
    60     }
    61     sort(ans+1,ans+tot+1,cmp);
    62     for(int i=1;i<=tot;i++)
    63         cout<<ans[i].a<<" "<<ans[i].b<<endl;
    64     return 0;
    65 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    数组
    数据结构的三个方面
    java数据结构和算法
    HashMap实现原理
    面试必问---HashMap原理分析
    Java中:>>>和>>区别
    java运算符 与(&)、非(~)、或(|)、异或(^)
    Java集合详解(全)
    String、StringBuffer、StringBuilder的区别
    abstract关键字、final关键字、static关键字、访问修饰符详解
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6623470.html
Copyright © 2020-2023  润新知