#include using namespace std; using ll = long long; using ld = long double; using pii = pair; using vi = vector; using vvi = vector; #define rep(i, a, b) for(ll i = (a); i < (b); i++) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() void solve() { ll n; cin >> n; vector> adj(n); rep(i,0,n-1) { int u, v; cin >> u >> v; adj[--u].insert(--v); adj[v].insert(u); } /* function dfs = [&] (ll u, ll p) { vi sizes; for (auto x : adj[u]) { if (x == p) continue; sizes.push_back(dfs(x, u)); } sort(all(sizes)); ll acc = 1; for (auto x : sizes) { if (x > acc) {cout << "NO\n", exit(0); } acc += x; } return acc; };*/ priority_queue,greater<>> pq; rep(i,0,n) { if (ssize(adj[i]) > 1) continue; pq.emplace(1, i); } vi st(n, 1); while (!empty(pq)) { auto [d, u] = pq.top(); pq.pop(); if (empty(adj[u])) continue; assert(ssize(adj[u]) == 1); auto v = *begin(adj[u]); if (st[v] < st[u]) cout << "NO\n", exit(0); st[v] += st[u]; adj[v].erase(u); if (ssize(adj[v]) == 1) pq.emplace(st[v], v); } cout << "YES\n"; } int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); //ll t; cin >> t; while(t--) solve(); }