1 条题解

  • 0
    @ 2025-4-7 21:19:29

    C :

    #include <stdio.h>
    int i,j,n,m,a[1001],b[1001],c[1001];
    void make_set()
    {
    	scanf("%d%d",&n,&m);
            for(i=1;i<=m;i++)
                    scanf("%d%d",&a[i],&b[i]);
            for(i=1;i<=n;i++)
                    c[i]=i;
    }
    void count()
    {
    	j=1;
        while(j==1)
        {
    		j=0;
            for(i=1;i<=m;i++)
            {
    			if(c[a[i]]<c[b[i]])
                {
    				j=1;
    				c[b[i]]=c[a[i]];
                }
                if(c[a[i]]>c[b[i]])
                {
    				j=1;
    				c[a[i]]=c[b[i]];
                }
    		}
    	}
    }
    void print()
    {
    	j=0;
        for(i=1;i<=n;i++)
    	{
    		if(c[i]==i)
    			j++;
    	}
        printf("%d\n",j);
    }
    int main()
    {
            int t;
            scanf("%d",&t);
            while(t--)
            {
    			make_set();
    			count();
    			print();
            }
            return 0;
    }
    

    C++ :

    #include <stdio.h>
    int run()
    {
    	int n,m,a[1111],b[1111],c[1111],i,j,k;
    	scanf("%d%d",&n,&m);
    	for(i=1;i<=m;i++)
    		scanf("%d%d",&a[i],&b[i]);
    	for(i=1;i<=n;i++)
    		c[i]=i;
    	k=1;
    	while(k==1)
    	{
    		k=0;
    		for(i=1;i<=m;i++)
    		{
    			if(c[a[i]]<c[b[i]])
    			{
    				k=1;
    				c[b[i]]=c[a[i]];
    			}
    			if(c[a[i]]>c[b[i]])
    			{
    				k=1;
    				c[a[i]]=c[b[i]];
    			}
    		}
    	}
    	j=0;
    	for(i=1;i<=n;i++)
    		if(c[i]==i)
    			j++;
    	printf("%d\n",j);
    }
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t!=0)
    	{
    		t--;
    		run();
    	}
    	return 0;
    }
    

    Java :

    import java.io.*;
    import java.util.*;
    
    public class Main{
     static boolean b[]=new boolean[1005];
      static int f[]=new int[1005],r[]=new int[1005];
      static int getfather(int n){
       return f[n]=f[n]==n?n:getfather(f[n]); 
      }
      static void Union(int fa,int fb){
        if(r[fa]>=r[fb]){
         f[fb]=f[fa];r[fa]+=r[fb];
        }else{
         f[fa]=f[fb];r[fb]+=r[fa];
        }return;
      }
      public static void main(String args[]){
       Scanner jin=new Scanner(System.in);
        while(true){
         int T=jin.nextInt();
          while(T-->0){
           int N=jin.nextInt(),M=jin.nextInt();
            for(int i=1;i<=N;i++){
             r[i]=1;f[i]=i;b[i]=false; 
            }
            for(int i=0;i<M;i++){
             int A=jin.nextInt(),B=jin.nextInt();
              int fa=getfather(A),fb=getfather(B);
              if(fa!=fb)Union(fa,fb);
            }
            int cnt=0;
            for(int i=1;i<=N;i++)
              if(!b[getfather(i)]){
             b[getfather(i)]=true;
              cnt++;
            }
            System.out.println(cnt);
          }
        }
      }
    }
    

    Python :

    def space_input():
        s=raw_input().split()
        for i in range(len(s)):
            s[i]=eval(s[i])
        return tuple(s)
    def main():
        try:
            n,p=space_input()
        except:
            n,p=space_input()
        friends=[{i} for i in range(1,n+1)]
        for i in range(p):
            a,b=space_input()
            contact={}
            for number in (a,b):
                for j in range(n):
                    if number in friends[j]:
                        contact[number]=j
            if contact[a]<contact[b]:
                friends[contact[a]]=friends[contact[a]]|friends.pop(contact[b])
                n-=1
            elif contact[b]<contact[a]:
                friends[contact[b]]=friends[contact[b]]|friends.pop(contact[a])
                n-=1
        print len(friends)
    t=input()
    for i in range(t):
        main()
    
    • 1

    信息

    ID
    1178
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者