#include using namespace std; #define tsolve int t; cin >> t; while (t--) solve #define all(x) ::begin(x), ::end(x) #define sz(x) (ll)::size(x) using ll = long long; using ld = long double; int n; vector> g; vector s; void dfs_sz(int v, int from = -1){ s[v] = 1; for(int u : g[v]){ if(u != from){ dfs_sz(u, v); s[v] += s[u]; } } } vector cents; void dfs_cent(int v, int from){ for(int u : g[v]){ if(u != from){ if(2*s[u] == n){ cents.push_back(v); cents.push_back(u); return; } if(2*s[u] > n){ dfs_cent(u, v); return; } } } cents.push_back(v); } bool ok = true; void dfs(int u, int par){ vector vals; for(int v : g[u]){ if(v != par) vals.push_back(s[v]); } sort(all(vals)); int x = 1; for(int y : vals){ if(y > x) ok = false; x += y; } for(int v : g[u]) if(v != par) dfs(v, u); } void solve() { cin >> n; g.resize(n); for(int i = 0; i < n-1; i++){ int u, v; cin >> u >> v; u--, v--; g[u].push_back(v); g[v].push_back(u); } s.resize(n); dfs_sz(0); dfs_cent(0, -1); bool ans = false; for(int u : cents){ dfs_sz(u); ok = true; dfs(u, -1); if(ok) ans = true; } if(ans) cout << "YES\n"; else cout << "NO\n"; } int main() { cin.tie(0)->sync_with_stdio(false); cout << setprecision(16); solve(); }