功能
    将两个集合合并
    询问两个元素是否在一个集合当中

code
    初始化
        for( int i = 1; i <= n; i ++ )
            fa[i] = i;

    查询( 返回x的祖宗节点 + 路径压缩 )
        int find( int x )
        {
            if( fa[x] == x )
                return x;
            else
            {
                fa[x] = find(  fa[x] );
                return find( fa[x] );
            }
        }
    合并
        void merge( int x, int y )
        {
            fa[find( x )] = find( y );
                    // 合并 x 和 y 所在的集合
            fa[x] = fa[y];
                   // 把x合并到y下面 
        }
反集
    若 a 和 b 是敌人 合并 n + a 和 b   n + b 和 a
    若 a 和 c 是敌人 合并 n + a 和 c   n + c 和 a
    则 b 和 c 就处在一个集合