1 条题解

  • 0
    @ 2025-12-11 14:41:48

    C :

    #include <stdio.h>
    #define Max 1000000
    
    int main ()
    {
    	int a,b,n=0,tempa,tempb,tree[Max+1];
    	for(int i=0;i<Max;i++)
    		tree[i]=-1;
    	while(scanf("%d%d",&a,&b)!=EOF)
    	{
    		if(a>n)
    			n=a;
    		if(b>n)
    			n=b;
    		if(tree[a]==-1)
    			tree[a]=0;
    		if(tree[b]==-1)
    			tree[b]=0;
    		tempa=a;
    		while(tree[tempa])
    			tempa=tree[tempa];
    		tempb=b;
    		while(tree[tempb])
    			tempb=tree[tempb];
    		if(tempa!=tempb)
    			tree[tempa]=tempb;
    	}
    	int count=0;
    	for(int i=1;i<=n;i++)
    		if(!tree[i])
    			count++;
    	printf("%d\n",count);
    	//getchar();
    	//getchar();
    }
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<map>
    #include<vector>
    using namespace std;
    
    int v[200005];
    vector<int> l[200005];
    map<int,int> mm;
    int n;
    
    int find(int k) {
    	map<int,int>::iterator it=mm.find(k);
    	if (it!=mm.end()) return it->second;
    	int ret=mm.size();
    	mm.insert(make_pair(k,ret));
    	return ret;
    }
    
    void dfs(int k) {
    	v[k]=1;
    	for(int i=0;i<l[k].size();i++) {
    		if (!v[l[k][i]]) dfs(l[k][i]);
    	}
    }
    
    int main() {
    	int t1,t2;
    	while(scanf("%d %d",&t1,&t2)!=EOF) {
    		t1=find(t1);
    		t2=find(t2);
    		if (t1!=t2) {
    			l[t1].push_back(t2);
    			l[t2].push_back(t1);
    		}
    	}
    	n=mm.size();
    	for(int i=0;i<n;i++) v[i]=0;
    	int ret=0;
    	for(int i=0;i<n;i++) if (!v[i]) {
    		dfs(i);
    		ret++;
    	}
    	printf("%d\n",ret);
    	return 0;
    }
    
    

    信息

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