Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <algorithm>#include <string>#include <map>using namespace std;const int MaxN = 200005;struct People {int _pre;int _sum;void init (int id) {_pre = id;_sum = 1;}};People ps[MaxN];int cntP;int find (int x) {if (x == ps[x]._pre) return x;else return ps[x]._pre = find(ps[x]._pre);}void unin (int x, int y) {int prex = find(x), prey = find(y);if (prex == prey) return;if (ps[prex]._sum > ps[prey]._sum) {ps[prey]._pre = prex;ps[prex]._sum += ps[prey]._sum;} else {ps[prex]._pre = prey;