2 条题解

  • 0
    @ 2026-1-11 22:10:09

    板子题,没啥好说的

    import java.io.*;
    
    public class Main{   //并查集
        static int n,m;
        static StreamTokenizer st;
        static PrintWriter pw;
        static int[]father,size;
    
        static int Find(int n)  //寻找根节点
        {
            if(n==father[n]) return n;
            father[n]=Find(father[n]);
            return father[n];
        }
      
        static boolean Query(int a,int b)
        {
            a=Find(a);
            b=Find(b);
            return a==b;
        }
    
        static void Hebing(int a,int b)
        {
            a=Find(a);
            b=Find(b);
            if(a==b) return;
            if (size[a] < size[b]) {  //小的合并大的里
                father[a]=b;
                size[b]+=size[a];
            } else {
                father[b]=a;
                size[a]+=size[b];
            }
        }
        public static void main(String[] args) throws IOException {
            st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
            pw=new PrintWriter(System.out);
            st.nextToken();
            n= (int) st.nval;
            st.nextToken();
            m= (int) st.nval;
            father=new int[n+1];
            size=new int[n+1];
            for(int i=1;i<=n;i++)
            {
                father[i]=i;
                size[i]=1;
            }
            for(int i=1;i<=m;i++)
            {
                st.nextToken();
                String ope=st.sval;
                switch (ope)
                {
                    case "Q1":
                    {
                        st.nextToken();
                        int a= (int) st.nval;
                        st.nextToken();
                        int b= (int) st.nval;
    System.out.println(Query(a,b)?"Yes":"No");
                        break;
                    }
                    case "Q2":
                    {
                        st.nextToken();
                        int a= (int) st.nval;
            System.out.println(size[Find(a)]);
                        break;
                    }
                    case "C":  //连接
                    {
                        st.nextToken();
                        int a= (int) st.nval;
                        st.nextToken();
                        int b= (int) st.nval;
                        Hebing(a,b);
                        break;
                    }
                }
            }
        }
    }
    
    

    信息

    ID
    52
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    28
    已通过
    15
    上传者