燕青 @ 2016-11-13 08:34:30
#include<iostream>
using namespace std;
const int maxn=1001;
int p[maxn];
int find(int j)
{
int x=j;
while(x!=p[x])
x=p[x];
return x;
}
int hebing(int r,int t )
{
if(find(r)!=find(t))
p[r]=p[t];
return 0;
}
int main()
{
int n,m;
cin>>n>>m;
if(n!=0)
{ if(m!=0){
for(int i=1;i<=n;i++)
{
p[i]=i;
}
int zongshu=n-1;
// for(int i=1;i<=m;i++)
while(m-->0)
{
int a,b;
cin>>a>>b;
if(find(a)!=find(b))
{
hebing(a,b);
zongshu--;
}
}
if(zongshu<=0)
cout<<0;
else cout<<zongshu;
}
else cout<<n-1;
}
else cout<<0;
}
之前没有加上 if n和m 为0的条件 也是70分
by 寻鸢 @ 2017-07-04 17:02:04
#include<bits/stdc++.h>
using namespace std;
int f[10001];
int find(int x)
{
if(x==f[x])return x;
else return find(f[x]);
}
int main(){
int a,b,root1,root2,i,n,m,q,s=0;
cin>>n>>m;
for(i=1;i<=n;i++)f[i]=i;
for(i=1;i<=m;i++){
cin>>a>>b;
root1=find(a);
root2=find(b);
if (root1!=root2)f[root2]=root1;
}
for (i=1;i<=n;i++){
if (f[i]==i)s++;
}
cout<<s-1;
return 0;
}
by 轩槿 @ 2017-07-06 21:49:32
#include<algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <vector>
#include <bitset>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
int n,m,a,b,ans;
int f[1005],s[1005];
int find(int x){
if(f[x]==x)return f[x];
return f[x]=find(f[x]);
}
int main(){
freopen("ii.in","r",stdin);
freopen("ii.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
f[i]=i;
}
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
f[find(a)]=find(b);
}
for(int i=1;i<=n;i++){
s[i]=f[find(i)];
}
sort(s+1,s+1+n);
for(int i=1;i<=n;i++){
if(s[i]!=s[i-1])ans++;
}
printf("%d",ans-1);
return 0;
}