#include #define pii pair using namespace std; set g[200005]; int deg[200005], value[200005]; priority_queue pq; void solve() { int n; cin >> n; for(int i = 1; i < n; i++) { int x, y; cin >> x >> y; g[x].insert(y); g[y].insert(x); deg[x]++, deg[y]++; } for(int i = 1; i <= n; i++) { value[i] = 1; if(deg[i] == 1) pq.push({-deg[i], i}); } int op = 0; while(!pq.empty() && ++op <= n - 2) { pii p = pq.top(); pq.pop(); int node = p.second; int par = *g[node].begin(); //cout << par << " " << node << " " << val << "\n"; g[par].erase(node); g[node].clear(); if(value[par] < value[node]) { cout << "NO\n"; return; } value[par] += value[node]; value[node] = 0; if(g[par].size() == 1) pq.push({-value[par], par}); } cout << "YES\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #ifdef LOCAL freopen("test.in", "r", stdin); freopen("test.out", "w", stdout); #else #endif int T = 1; //cin >> T; while(T--) { solve(); } return 0; }