poj 2492 A Bug's Life

来源:互联网 发布:mac系统打符号 编辑:程序博客网 时间:2024/05/17 23:41

题目链接:http://poj.org/problem?id=2492

    把父亲初始化为自己要比初始化为-1的要快,

1,要想男女分开,必须找到的祖先是不同的。

2,(1),如果祖先相同就矛盾了,flag=1;

       (2),  x,y都没对象。

       (3),  x没对象,y有对象。

       (4),   x,y都有对象。

       (5),   x有对象,y无对象。

3,注意两组数据间要有空行。

#include <cstdio>#include <cstring>struct node{    int pre;    int duixiang;};node stu[2010];int t,n,m;int find(int x)  //差不多{    int r=x;    while(stu[r].pre!=r)        r=stu[r].pre;    while(r!=x)    {        int p=stu[x].pre;        stu[x].pre=r;        x=p;    }    return r;}/*int find(int x)  、、差不多{    if(x != stu[x].pre)        stu[x].pre = find(stu[x].pre);    return stu[x].pre;}*/void unionone(int x,int y)//慢{    int xx=find(x);    int yy=find(y);    stu[xx].pre=yy;}/*void unionone(int x, int y)//快{    x = find(x);    y = find(y);    if(x == y)        return;    stu[y].pre = x;}*/int main(){    int i,x,y,cnt=0;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        for(i=1;i<=n;++i)        {            stu[i].pre=i;            stu[i].duixiang=0;        }        int flag=0;        for(i=1;i<=m;++i)        {            scanf("%d%d",&x,&y);            int xx=find(x);            int yy=find(y);           // printf("xx  %d   yy  %d\n",xx,yy);            if(flag==1)                continue;            if(xx==yy)            {                flag=1;            }            else if((stu[x].duixiang==0)&&(stu[y].duixiang==0))            {                stu[x].duixiang=y;                stu[y].duixiang=x;            }            else if((stu[x].duixiang==0)&&(stu[y].duixiang!=0))            {                stu[x].duixiang=y;                unionone(x,stu[y].duixiang);            }            else if((stu[x].duixiang!=0)&&(stu[y].duixiang!=0))            {                unionone(stu[x].duixiang,y);                unionone(x,stu[y].duixiang);            }            else if((stu[x].duixiang!=0)&&(stu[y].duixiang==0))            {                stu[y].duixiang=x;                unionone(stu[x].duixiang,y);            }        }        ++cnt;        if(flag==1)        {            printf("Scenario #%d:\n",cnt);            printf("Suspicious bugs found!\n");        }        else        {            printf("Scenario #%d:\n",cnt);            printf("No suspicious bugs found!\n");        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击