[Luogu] 炸铁路 | Tarjan 割边

简介: 题目描述A 国派出将军uim,对 B 国进行战略性措施,以解救涂炭的生灵。B 国有 n个城市,这些城市以铁路相连。任意两个城市都可以通过铁路直接或者间接到达。uim 发现有些铁路被毁坏之后,某两个城市无法互相通过铁路到达。这样的铁路就被称为 key road。uim 为了尽快使该国的物流系统瘫痪,希望炸毁铁路,以达到存在某两个城市无法互相通过铁路到达的效果。然而,只有一发炮弹(A 国国会不给钱了)。所以,他能轰炸哪一条铁路呢?

题目描述


A 国派出将军uim,对 B 国进行战略性措施,以解救涂炭的生灵。


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


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


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


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


输入格式


第一行 (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


题意:


题中所述的key Road即为割边

题意比较裸

对于图的连通行这一块,就可以通过 Tarjan来求出割边来进行排序输出边即可

割边:去掉某一条边之后,图中强连通分量的个数增加,这样的边叫做割边,这样的边在求解过程中满足 low[to]>dfn[u]

所以说在求解的过程中,将满足条件的边进行存储即可


struct node{
  int to,nex,id;
}e[maxn];
int n,m;
int cnt,head[maxn];
typedef pair<int,int> PII;
void init(){
  cnt = 0;
  for(int i=1;i<=n;i++) head[i] = -1;
}
void add(int u,int v,int id){
  e[cnt].to = v;
  e[cnt].nex = head[u];
  e[cnt].id = id;
  head[u] = cnt ++;
}
int tim = 0;
int dfn[maxn],low[maxn];
vector<PII> edge;
vector<PII> ans;
void Tarjan(int u,int father){
  dfn[u] = low[u] = ++ tim;
  for(int i=head[u];~i;i=e[i].nex){
    int to = e[i].to;
    if(!dfn[to]) {
      Tarjan(to,u);
      low[u] = min(low[u],low[to]);
      if(low[to] > dfn[u]){
        ans.push_back(edge[e[i].id-1]);
      }
    }else if(to != father){
      low[u] = min(low[u],dfn[to]);
    }
  }
}
int main() {
  n = read,m = read;
  init();
  for(int i=1;i<=m;i++){
    int u = read,v = read;
    add(u,v,i);
    add(v,u,i);
    edge.push_back({min(u,v),max(u,v)});
  }
  Tarjan(1,0);
  sort(ans.begin(),ans.end(),[](PII a,PII b){
    if(a.first != b.first) return a.first < b.first;
    else return a.second < b.second;
  });
  for(int i=0;i<ans.size();i++){
    printf("%d %d\n",ans[i].first,ans[i].second);
  }
  return 0;
}
/**
**/




目录
相关文章
|
9月前
|
JSON 数据格式
星系炸弹(蓝桥杯)
星系炸弹(蓝桥杯)
|
9月前
洛古 P1002 过河卒
洛古 P1002 过河卒
1314:【例3.6】过河卒(Noip2002)
1314:【例3.6】过河卒(Noip2002)
172 0
2022年9月月赛乙组 T3.棋盘问题
2022年9月月赛乙组 T3.棋盘问题
过河卒-蓝桥杯-动态规划
过河卒-蓝桥杯-动态规划
150 0
luogu P1516 青蛙的约会
luogu P1516 青蛙的约会
88 0
luogu P1993 小K的农场(差分约束系统)
luogu P1993 小K的农场(差分约束系统)
76 0
|
机器学习/深度学习 人工智能 算法
C++/PTA 球队“食物链”
某国的足球联赛中有N支参赛球队,编号从1至N。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。
137 0
【洛谷】宇宙总统
【洛谷】宇宙总统
114 0

热门文章

最新文章