#include using namespace std; vector adj[200005]; int sub[200005]; void dfs(int v, int par){ sub[v] = 1; for(auto u:adj[v]){ if(u != par){ dfs(u, v); sub[v] += sub[u]; } } } bool ans = 0; void dfs2(int v, int par){ sub[v] = 1; vector x; for(auto u:adj[v]){ if(u == par) continue; dfs2(u, v); sub[v] += sub[u]; x.push_back(sub[u]); } int now = 1; sort(x.begin(), x.end()); for(auto u:x){ if(u > now) ans = 0; now += u; } } void solve(){ int n; cin >> 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); } dfs(1,0); for(int i = 1; i <= n;i++){ bool ok = 1; for(auto u:adj[i]){ int tmp = sub[u]; if(sub[u] > sub[i]) tmp = n - sub[i]; if(tmp > (n + 1)/2) ok = 0; } if(ok){ ans = 1; dfs2(i, 0); if(ans){ cout << "YES"; return; } } } cout << "NO"; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); int t = 1; solve(); }