//入力検証用 #include #include #include "assert.h" #include using namespace std; class UnionFindTree{ typedef struct { int parent; int rank; }base_node; vector node; public: UnionFindTree(int n){ node.resize(n); for(int i=0; i node[y].rank){ node[y].parent = x; }else{ node[x].rank++; unite(x,y); } } }; int main(){ int n; cin >> n; assert(2<=n && n<=100000); UnionFindTree uft(n); vector u(n-1), v(n-1); int num_edge = 0; int x,y; while(cin >> x >> y){ num_edge++; u[num_edge] = x; u[num_edge] = y; assert(x < y); assert(1<=x && x<=100000); assert(1<=y && y<=100000); x--;y--; assert(!uft.same(x,y)); uft.unite(x,y); } assert(num_edge == n-1); set par; for(int i=0; i