Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <cstdio>#include <map>#include <string>using namespace std;#define MAXN 100010map<string, int> name2id;int p[MAXN], Rank[MAXN];void make_set(int u){p[u] = u;Rank[u] = 0;}int find_set(int u){if (p[u] != u)p[u] = find_set(p[u]);return p[u];}void union_set(int x, int y){x = find_set(x);y = find_set(y);if (Rank[x] > Rank[y])p[y] = x;else if (Rank[y] > Rank[x])