HDU3342---Legal or Not

来源:互联网 发布:盐为什么国家控制知乎 编辑:程序博客网 时间:2024/06/16 04:03

寒假按照模版过了几个拓扑排序题,思路明白,但是代码不太清楚,然后看视频,用队列的方法重新搞了搞,简单明了。

然而这道题刚开始没考虑重边,然后重新定义了一个k=m;有重边的时候k--;然后就过了。

 

#include<stdio.h>#include<algorithm>#include<string.h>#include<stack>#include<queue>#define ll __int64#define M 100007using namespace std;int n,m,map[110][110],in[110],k;queue<int> s;void topsort(){   int ans=0,flag=0;    for(int i=0;i<n;i++){        if(in[i]==0) {s.push(i);//把入度为0的搞进来        flag++;        }    }    while(flag!=0)    {        int t=s.front();        s.pop();        flag--;        for(int i=0;i<n;i++){//把t指向的入度减一            if(map[t][i]==1){                in[i]--;                ans++;            if(in[i]==0) {//如果此时入度为一,入列                    s.push(i);                    flag++;            }            }        }    }    if(ans==k) printf("YES\n");    else printf("NO\n");}int main(){    while(scanf("%d%d",&n,&m)!=EOF)    {        if(n==0&&m==0) break;        k=m;        memset(in,0,sizeof(in));        memset(map,0,sizeof(map));        int a,b;        for(int i=0;i<m;i++){            scanf("%d%d",&a,&b);            if(!map[a][b]){             map[a][b]=1;             in[b]++;            }            else k--;//重边的情况        }        topsort();    }}


然后另一个代码,终于理解了

#include<stdio.h>#include<algorithm>#include<string.h>#include<stack>#include<queue>#define ll __int64#define M 100007using namespace std;int n,m,map[110][110],in[110],k;queue<int> s;void topsort(){   int ans=0;    for(int i=0;i<n;i++)    {        int j=0;        while(in[j]!=0)        j++;        in[j]=-1;        for(int k=0;k<n;k++)        {            if(map[j][k]==1)                in[k]--,ans++;        }    }    if(ans==k) printf("YES\n");    else printf("NO\n");}int main(){    while(scanf("%d%d",&n,&m)!=EOF)    {        if(n==0&&m==0) break;        k=m;        memset(in,0,sizeof(in));        memset(map,0,sizeof(map));        int a,b;        for(int i=0;i<m;i++){            scanf("%d%d",&a,&b);            if(!map[a][b]){             map[a][b]=1;             in[b]++;            }            else k--;//重边的情况        }        topsort();    }}


 

0 0
原创粉丝点击