#include using namespace std; #define int long long #define double long double #define f first #define s second const int N = 2e5 + 44; vector < int > g[N]; void find() { int n; cin >> n; for (int i = 0; i < n; ++i) g[i].clear (); for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; g[v].push_back(u); g[u].push_back(v); } /*set < pair < int , int > > st; vector < int > final; for (int i = 0; i < n; ++i) { st.insert({g[i].size (), i}); } queue < pair < int , int > while (!st.)*/ vector sz(N, 1); vector used(N, 0); vector deg(N, 0); priority_queue, vector >, greater > > q1; for(int i = 1; i <= n; i++) { deg[i] = g[i].size(); if (g[i].size() == 1) { used[i] = 1; q1.push({1, i}); } } while(q1.size() != 0) { pair a = q1.top(); q1.pop(); deg[a.s]--; for(auto k:g[a.s]) { if (deg[k] != 0) { if (sz[k] < a.f) { cout << "NO"; return; } sz[k] += a.f; deg[k]--; if (deg[k] == 1) { q1.push({sz[k], k}); } } } } cout << "YES"; } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; while(t--) { find(); } return 0; }