1 条题解

  • 0
    @ 2024-12-24 10:06:02

    C :

    #include<stdio.h>
    #include<string.h>
    #define N 102
    struct EDGE
    {
    	int x,y;
    }edge[505];
    int n,m;
    int parent[N];
    int ans[505];
    
    int find_parent(int p)
    {
    	if (parent[p]==-1)
    	{
    		return p;
    	}
    	else
    	{
    		return parent[p]=find_parent(parent[p]);
    	}
    }
    
    int find_merge(int a,int b)
    {
    	a=find_parent(a);
    	b=find_parent(b);
    	if (a!=b)
    	{
    		parent[a]=b;
    		return 1;
    	}
    	else
    	{
    		return 0;
    	}
    }
    
    
    int main()
    {
    	int i;
    	while (scanf("%d%d",&n,&m)!=EOF)
    	{
    		memset(edge,0,sizeof(edge));
    		memset(parent,-1,sizeof(parent));
    		for ( i = 1; i <=m ; i++)
    		{
    			scanf("%d%d",&edge[i].x,&edge[i].y);
    		}
    		ans[m]=n;
    		for ( i = m; i >=1 ; i--)
    		{
    			if(find_merge(edge[i].x,edge[i].y))
    			{
    				ans[i-1]=ans[i]-1;
    			}
    			else
    			{
    				ans[i-1]=ans[i];
    			}
    		}
    		for ( i = 1; i <m ; i++)
    		{
    			printf("%d ",ans[i]);
    		}
    		printf("%d\n",n);
    	}
    	return 0;
    }
    

    C++ :

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int parent[110],num[510];
    struct edge
    {
    	int x,y;
    }ee[510];
    
    int root(int p)
    {
    	if(parent[p]==-1)return p;
    	return parent[p]=root(parent[p]);
    }
    
    int main()
    {
    	int j,i,m,n;
    	while(scanf("%d%d",&n,&m)!=EOF)
    	{
    
    		memset(parent,-1,sizeof(parent));
    		memset(num,0,sizeof(num));
    		num[m]=n;
    		for(i=1;i<=m;i++)
    			scanf("%d%d",&ee[i].x,&ee[i].y);
    		for(i=m;i>0;i--)
    		{
    			if(root(ee[i].x)!=root(ee[i].y))
    			{
    				num[i-1]=num[i]-1;
    				parent[root(ee[i].x)]=root(ee[i].y);
    			}
    			else num[i-1]=num[i];
    		}
    		for(i=1;i<m;i++)
    			printf("%d ",num[i]);
    		printf("%d\n",num[m]);
    	}
    	return 0;
    }
    
    • 1

    信息

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