using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; class TEST{ static void Main(){ Sol mySol =new Sol(); mySol.Solve(); } } class Sol{ public void Solve(){ var UF = new UnionFind(N+1); for(int i=0;iint.Parse(e));} static long[] rla(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>long.Parse(e));} static double[] rda(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>double.Parse(e));} } class UnionFind{ int[] parent; int[] mem; int compo; int N; public UnionFind(int n_){ Initialize(n_); } public void Initialize(int n_){ N=n_; parent=new int[N]; mem=new int[N]; for(int i=0;i mem[b]){ parent[b] = a; mem[a] += mem[b]; } else if (mem[b] > mem[a]){ parent[a] = b; mem[b] += mem[a]; } else { if(a < b){ parent[b] = a; mem[a] += mem[b]; } else { parent[a] = b; mem[b] += mem[a]; } } compo-=1; } public bool IsRoot(int x){ return x==parent[x]; } public int MemCnt(int x){ return mem[Parent(x)]; } public void Dump(){ for(int i=0;i