1019 集合论与图论

来源:互联网 发布:淘宝拍卖车辆靠谱吗 编辑:程序博客网 时间:2024/05/22 08:14

1019 集合论与图论
一道简单(然而我做了2h)的题目,
提了4次,最后仔细一看——MD有自环,这是闹哪样。
好生气好生气。
啊啊,
第一次——没有完全重置数据。
第二、三次——没有发现自环。(对于上一次的问题解决方案:方案一:认真一点点找需要重置的数据、方案二:定义函数)
第四次——AC。(对于上一次的问题解决方案:对于自环,把原来防止自环出现的visit数组删去了)
代码如下

#include<stdio.h>#include<string.h>#include<stdbool.h>typedef struct edge{    int to;    int next;}E;int head[100000];E a[100000];int dfs(int begin,int num){    int temp;    int lemp;    int flag=0;    temp=head[num];    lemp=head[begin];    while(temp)    {        flag=0;        while(lemp)        {            if(a[lemp].to==a[temp].to)            {                flag=1;                break;            }            lemp=a[lemp].next;        }        if(flag==0)        return 0;        temp=a[temp].next;    }    return 1;}int main(){    int T;    int N,M;    int i;    int u,v,temp;    int flag=1;    scanf("%d",&T);    while(T--)    {           flag=1;        scanf("%d %d",&N,&M);        memset(head,0,sizeof(head));        for(i=1;i<=100000;i++)//要手动置零         {            a[i].to=0;            a[i].next=0;        }        for(i=1;i<=M;i++)        {            scanf("%d %d",&u,&v);            a[i].to=v;            a[i].next=head[u];            head[u]=i;        }        for(i=1;i<=N;i++)        {            temp=head[i];            while(temp)            {                if(dfs(i,a[temp].to))                temp=a[temp].next;                else                {                    flag=0;                    break;                }            }            if(flag==0)            break;        }        if(flag)        printf("Yes\n");        else        printf("No\n");    }    return 0;}
0 0
原创粉丝点击