#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
void convertToDirectedTree(vector<vector<int>>& adj, int root, vector<vector<int>>& directedAdj) {
int n = adj.size();
vector<bool> visited(n, false);
queue<int> q;
q.push(root);
visited[root] = true;
while (!q.empty()) {
int node = q.front();
q.pop();
for (int neighbor : adj[node]) {
if (!visited[neighbor]) {
directedAdj[node].push_back(neighbor);
visited[neighbor] = true;
q.push(neighbor);
}
}
}
}
int main() {
int n, root;
cout << "Enter number of nodes: ";
cin >> n;
vector<vector<int>> adj(n), directedAdj(n);
cout << "Enter edges (u v) for an undirected tree:\n";
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
cout << "Enter root node: ";
cin >> root;
convertToDirectedTree(adj, root, directedAdj);
// Sorting edges by the first element before output
vector<pair<int, int>> edges;
for (int i = 0; i < n; i++) {
for (int v : directedAdj[i]) {
edges.emplace_back(i, v);
}
}
sort(edges.begin(), edges.end());
cout << "Directed Tree Edges:\n";
for (const auto& edge : edges) {
cout << edge.first << " -> " << edge.second << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBjb252ZXJ0VG9EaXJlY3RlZFRyZWUodmVjdG9yPHZlY3RvcjxpbnQ+PiYgYWRqLCBpbnQgcm9vdCwgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgZGlyZWN0ZWRBZGopIHsKICAgIGludCBuID0gYWRqLnNpemUoKTsKICAgIHZlY3Rvcjxib29sPiB2aXNpdGVkKG4sIGZhbHNlKTsKICAgIHF1ZXVlPGludD4gcTsKICAgIAogICAgcS5wdXNoKHJvb3QpOwogICAgdmlzaXRlZFtyb290XSA9IHRydWU7CgogICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgbm9kZSA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwoKICAgICAgICBmb3IgKGludCBuZWlnaGJvciA6IGFkaltub2RlXSkgewogICAgICAgICAgICBpZiAoIXZpc2l0ZWRbbmVpZ2hib3JdKSB7CiAgICAgICAgICAgICAgICBkaXJlY3RlZEFkaltub2RlXS5wdXNoX2JhY2sobmVpZ2hib3IpOwogICAgICAgICAgICAgICAgdmlzaXRlZFtuZWlnaGJvcl0gPSB0cnVlOwogICAgICAgICAgICAgICAgcS5wdXNoKG5laWdoYm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbiwgcm9vdDsKICAgIGNvdXQgPDwgIkVudGVyIG51bWJlciBvZiBub2RlczogIjsKICAgIGNpbiA+PiBuOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoobiksIGRpcmVjdGVkQWRqKG4pOwoKICAgIGNvdXQgPDwgIkVudGVyIGVkZ2VzICh1IHYpIGZvciBhbiB1bmRpcmVjdGVkIHRyZWU6XG4iOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2sodSk7CiAgICB9CgogICAgY291dCA8PCAiRW50ZXIgcm9vdCBub2RlOiAiOwogICAgY2luID4+IHJvb3Q7CgogICAgY29udmVydFRvRGlyZWN0ZWRUcmVlKGFkaiwgcm9vdCwgZGlyZWN0ZWRBZGopOwoKICAgIC8vIFNvcnRpbmcgZWRnZXMgYnkgdGhlIGZpcnN0IGVsZW1lbnQgYmVmb3JlIG91dHB1dAogICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBlZGdlczsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgdiA6IGRpcmVjdGVkQWRqW2ldKSB7CiAgICAgICAgICAgIGVkZ2VzLmVtcGxhY2VfYmFjayhpLCB2KTsKICAgICAgICB9CiAgICB9CgogICAgc29ydChlZGdlcy5iZWdpbigpLCBlZGdlcy5lbmQoKSk7CgogICAgY291dCA8PCAiRGlyZWN0ZWQgVHJlZSBFZGdlczpcbiI7CiAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBlZGdlcykgewogICAgICAgIGNvdXQgPDwgZWRnZS5maXJzdCA8PCAiIC0+ICIgPDwgZWRnZS5zZWNvbmQgPDwgZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==