P1656炸铁路
一、题目描述

二、解题思路
tarjan求割边模板题,用个答案数组存答案,求出来后排序就可以了。
三、代码实现
1 #include "bits/stdc++.h" 2 using namespace std; 3 int G[200][200]; 4 int low[200],dfn[200],t = 1; 5 int root = 1; 6 int m,n; 7 vector <pair<int,int>> ans; 8 void dfs(int cur,int father) 9 { 10 low[cur] = t; 11 dfn[cur] = t; 12 t++; 13 for(int i = 1;i <= n;i++){ 14 if(G[cur][i]){ 15 if(dfn[i] == 0){ 16 dfs(i,cur); 17 low[cur] = min(low[cur],low[i]); 18 if(low[i] > dfn[cur]) 19 ans.emplace_back(make_pair(cur,i)); 20 } 21 else if(i != father) 22 low[cur] = min(dfn[i],low[cur]); 23 } 24 } 25 return; 26 } 27 int main() 28 { 29 int x,y; 30 cin >> n >> m; 31 for(int i = 1;i <= n;i++) 32 for(int j = 1;j <= n;j++) 33 G[i][j] = 0; 34 for(int i = 1;i <= m;i++){ 35 cin >> x >> y; 36 G[x][y] = 1; 37 G[y][x] = 1; 38 } 39 dfs(1,root); 40 sort(ans.begin(),ans.end()); 41 for(auto &u: ans) 42 cout << u.first << ' ' << u.second << endl; 43 return 0; 44 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}

浙公网安备 33010602011771号