#include using namespace std; const int N = 2e5 + 3; vector adj[N]; int n, d[N], sz[N]; bool active[N]; int get_par(int x){ for(int to: adj[x]){ if(!active[to]) continue; return to; } assert(false); return -1; } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 1; i <= n; ++i){ active[i] = true; } for(int i = 0; i < n - 1; ++i){ int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } set> s; for(int i = 1; i <= n; ++i){ d[i] = adj[i].size(); sz[i] = 1; if(d[i] == 1){ s.insert({sz[i], i}); } } int cnt = 0; while(!s.empty() && cnt < n - 1){ auto [sz_u, u] = *s.begin(); s.erase(s.begin()); ++cnt; int p = get_par(u); active[u] = false; if(sz[p] < sz[u]){ cout << "NO\n"; return 0; } sz[p] += sz[u]; active[u] = false; --d[p]; if(d[p] == 1){ s.insert({sz[p], p}); } } cout << "YES\n"; }