Number Of Ways To Reconstruct A Tree LeetCode solution in C++
1class Solution {2public:3int checkWays(vector<vector<int>> &pairs) {4unordered_map<int, unordered_set<int>> adj;5for (int i = 0; i < pairs.size(); i++) {6adj[pairs[i][0]].emplace(pairs[i][1]);7adj[pairs[i][1]].emplace(pairs[i][0]);8}910priority_queue<pair<int, int>> q;11for (auto &[x, arr] : adj) {12q.push({arr.size(), x});13}1415int n = q.size();16bool multiple = false;17unordered_set<int> seen;18while (!q.empty()) {19auto [sz, v] = q.top();20q.pop();2122int u = 0;23int usz = n + 1;24if (!seen.empty()) {25for (auto x : adj[v]) {26if (adj[x].size() < usz && seen.count(x)) {27u = x;28usz = adj[x].size();29}30}31}3233seen.emplace(v);34if (u == 0) {35if (sz != (n - 1)) {36return 0;37}38continue;39}4041for (auto x : adj[v]) {42if (x == u) {43continue;44}4546if (!adj[u].count(x)) {47return 0;48}49}5051if (usz == sz) {52multiple = true;53}54}5556if (multiple) {57return 2;58}5960return 1;61}62};