fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. void convertToDirectedTree(vector<vector<int>>& adj, int root, vector<vector<int>>& directedAdj) {
  9. int n = adj.size();
  10. vector<bool> visited(n, false);
  11. queue<int> q;
  12.  
  13. q.push(root);
  14. visited[root] = true;
  15.  
  16. while (!q.empty()) {
  17. int node = q.front();
  18. q.pop();
  19.  
  20. for (int neighbor : adj[node]) {
  21. if (!visited[neighbor]) {
  22. directedAdj[node].push_back(neighbor);
  23. visited[neighbor] = true;
  24. q.push(neighbor);
  25. }
  26. }
  27. }
  28. }
  29.  
  30. int main() {
  31. int n, root;
  32. cin >> n;
  33. vector<vector<int>> adj(n), directedAdj(n);
  34. for (int i = 0; i < n - 1; i++) {
  35. int u, v;
  36. cin >> u >> v;
  37. adj[u].push_back(v);
  38. adj[v].push_back(u);
  39. }
  40.  
  41. cin >> root;
  42.  
  43. convertToDirectedTree(adj, root, directedAdj);
  44. vector<pair<int, int>> edges;
  45. for (int i = 0; i < n; i++) {
  46. for (int v : directedAdj[i]) {
  47. edges.emplace_back(i, v);
  48. }
  49. }
  50.  
  51. sort(edges.begin(), edges.end());
  52.  
  53. for (const auto& edge : edges) {
  54. cout << edge.first << " " << edge.second << endl;
  55. }
  56.  
  57. return 0;
  58. }
Success #stdin #stdout 0.01s 5288KB
stdin
5
1 0
2 4
3 4
4 1
4
stdout
1 0
4 1
4 2
4 3