HDU1232

来源:互联网 发布:水利数据采集监测系统 编辑:程序博客网 时间:2024/05/21 08:43

我也是醉了。。。。。。

第一份WA的代码:

#include<iostream>#include<stdio.h>using namespace std;#include<string.h>int par[1001],rank[1001],flag[1001],n;void init(){    int i;    for(i=0;i<=n;i++)    {        par[i]=i;        rank[i]=0;    }}int find(int x){    if(par[x]==x)    {        return x;    }    else        return par[x]=find(par[x]);}void unite(int x,int y){    x=find(x);    y=find(y);    if(x==y)        return ;    if(rank[x]<rank[y])        par[x]=y;    else    {        par[y]=x;        if(rank[x]==rank[y])            rank[x]++;    }}int main(){    int m;    while(cin>>n,n)    {        scanf("%d",&m);        init();        int a,b,i;        while(m--)        {            scanf("%d%d",&a,&b);                unite(a,b);        }        int number=0;        memset(flag,0,sizeof(flag));        for(i=1;i<=n;i++)        {                   flag[par[i]]=1;        }        for(i=1;i<=n;i++)//就是这个地方。。。注意。。。        {            if(flag[i]==1)                number++;        }        cout<<number-1<<endl;    }}

我AC的代码;

#include<iostream>#include<stdio.h>using namespace std;#include<string.h>int par[1001],rank[10001],n;void init(){    int i;    for(i=0;i<=n;i++)    {        par[i]=i;        rank[i]=0;    }}int find(int x){    if(par[x]==x)    {        return x;    }    else        return par[x]=find(par[x]);}void unite(int x,int y){    x=find(x);    y=find(y);    if(x==y)        return ;    if(rank[x]<rank[y])        par[x]=y;    else    {        par[y]=x;        if(rank[x]==rank[y])            rank[x]++;    }}int main(){    int m;    while(cin>>n,n)    {        scanf("%d",&m);        init();        int a,b,i;        while(m--)        {            scanf("%d%d",&a,&b);                unite(a,b);        }        int number=0;        for(i=1;i<=n;i++)        {            if(par[i]==i)            {                number++;            }        }        cout<<number-1<<endl;    }}

最后一份是我学长的代码:

比我的简洁好多呀

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 1003
int main()
{
 
  int
 n,m,v[N],i,x,y,t;
  while
(
scanf("%d%d",&n,&m),n)
  {
  
      memset(v,0,sizeof(v));t=1;
     for
(
i=0;i<m;i++)
     {

        scanf("%d%d",&x,&y);
        while
(
v[x]>0)
            x=v[x];
        while
(
v[y]>0)
            y=v[y];
        if
(
x!=y)
        {

            v[y]=x;
            t++;
        }
     }

     printf("%d\n",n-t); 
  }


   return
 0;
}

但是运行时间都是一样的O.O

0 0
原创粉丝点击