fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. const int MAXN = 100005;
  9. vector<int> adj[MAXN];
  10. bool visited[MAXN];
  11. int tin[MAXN], low[MAXN], timer;
  12. set<pair<int, int>> bridges;
  13.  
  14. bool dfsCheck(int u, int target) {
  15. visited[u] = true;
  16. if (u == target) return true;
  17. for (int v : adj[u]) {
  18. if (!visited[v] && dfsCheck(v, target)) return true;
  19. }
  20. return false;
  21. }
  22.  
  23. void tim_canh_cau(int n) {
  24. for (int u = 1; u <= n; ++u) {
  25. for (int v : adj[u]) {
  26. if (u < v) {
  27.  
  28. adj[u].erase(remove(adj[u].begin(), adj[u].end(), v), adj[u].end());
  29. adj[v].erase(remove(adj[v].begin(), adj[v].end(), u), adj[v].end());
  30.  
  31. fill(visited, visited + n + 1, false);
  32. if (!dfsCheck(u, v)) {
  33. cout << u << " "<< v << endl;
  34. }
  35.  
  36.  
  37. adj[u].push_back(v);
  38. adj[v].push_back(u);
  39. }
  40. }
  41. }
  42. }
  43. int main() {
  44. int n, m;
  45. cin >> n >> m;
  46. for (int i = 0; i < m; i++) {
  47. int u, v;
  48. cin >> u >> v;
  49. adj[u].push_back(v);
  50. adj[v].push_back(u);
  51. }
  52. tim_canh_cau(n);
  53. }
  54.  
Success #stdin #stdout 0.01s 5824KB
stdin
5 5
1 2
2 3
3 4
3 5
4 5
stdout
1 2
2 3
2 3