请问为什么总是70分0.0

P2839 [国家集训队] middle

燕青 @ 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;
}

|