WA1和3,求助
  • 板块P1536 村村通
  • 楼主WangCurry
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/8/18 10:36
  • 上次更新2023/11/3 02:58:11
查看原帖
WA1和3,求助
764518
WangCurry楼主2023/8/18 10:36
#include<bits/stdc++.h>
using namespace std;
struct tree{
	int u,v;
}trees[499503];
int ans=0,n,m,f[1003],pd[5004],cnt=0;
int find(int x){
	if(f[x]==x)return f[x];
	return f[x]=find(f[x]); 
}
void Kruskal(){
    //for(int i=1;i<=m;i++)cout<<trees[i].u<<" "<<trees[i].v<<endl;
	for(int i=1;i<=m;i++){
		int x=find(trees[i].u),y=find(trees[i].v);
		if(x==y)continue;
		f[y]=x;
		cnt++;
		//cout<<"ans="<<ans<<"cnt="<<cnt<<endl;
		if(cnt==n-1)break;
	}
}
int main(){
	while(cin>>n&&n!=0){
		ans=0;
		cin>>m;
	    for(int i=1;i<=n;i++)f[i]=i;
	    for(int i=1;i<=m;i++)cin>>trees[i].u>>trees[i].v;
	    Kruskal();
	    for(int i=1;i<=n;i++)pd[i]=0;
	    for(int i=1;i<=n;i++)pd[find(f[i])]++;
	    for(int i=1;i<=n;i++){
	    	//cout<<"pd["<<i<<"]="<<pd[i]<<endl; 
		    if(pd[i])ans++;
	    }
		cout<<ans-1<<endl;
	} 
    
    return 0;
}
2023/8/18 10:36
加载中...