全RE求调,看不出来问题
  • 板块P1536 村村通
  • 楼主NeilyoD
  • 当前回复4
  • 已保存回复5
  • 发布时间2024/12/11 22:47
  • 上次更新2024/12/12 17:22:15
查看原帖
全RE求调,看不出来问题
1010033
NeilyoD楼主2024/12/11 22:47
#include<bits/stdc++.h>
using namespace std;
int n,m,c1,c2,sn=1;//城镇数目n,道路数目m
int dc[1002];//记录不同城市长; 
int fa[1002];
int find(int x){
	if(x==fa[x])return x;
	return fa[x]=find(fa[x]);
}
int join(int c1,int c2){
	int j1=find(c1),j2=find(c2);
	if(j1!=j2)fa[j1]=j2;
}
int search(int x){//有不同的返回1 
	int g=find(x); //g族长 
	for(int i=1;i<=sn;i++){
		if(dc[i]==g)return 0;
	}
	dc[sn++]=g;
	return 1;
}
int ct(){
	int cnt=0;
	for(int i=1;i<=n;i++){
		cnt+=search(fa[i]);//查是否有相同的元素 
	}
	return cnt;
}
int main(){
	while(1){
		cin>>n;
		if(n==0)break;
		cin>>m;
		for(int i=1;i<=n;i++)fa[i]=i;//初始化
		memset(dc,-1,sizeof(dc));
		sn=1;
		for(int i=1;i<=m;i++){
			cin>>c1>>c2;
			join(c1,c2);
		}
		//cout<<"t:";
		//for(int i=1;i<=4;i++)cout<<fa[i]<<" ";
		
		cout<<ct()-1;//连通块-1 
	}	
	
	
	return 0;
}

初学者,调不动,看不出问题在哪

2024/12/11 22:47
加载中...