邻接矩阵,邻接表,为啥前一个wa,后一个ac?

回复帖子

@Zroom 2018-06-27 14:52 回复
#include<bits/stdc++.h>
using namespace std;
int a[10001][10001],r[10001],c[10001],ans[10001];
int v[10001];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        cin>>x>>y;
        r[y]++,c[x]++;
        a[x][c[x]]=y;
    }
    int top=0;
    for(int i=1;i<=n;i++)
    {
        if(!r[i])
        {
        ans[++top]=i;
        v[i]=1;
        }
    }
    do
    {
        int t=ans[top];top--;
        for(int i=1;i<=c[t];i++)
        {
            r[a[t][i]]--;
            if(!r[a[t][i]])
            {
                v[a[t][i]]=v[t]+1;
                ans[++top]=a[t][i];
            }
        }
    }
    while(top);
    for(int i=1;i<=n;i++)
    cout<<v[i]<<endl;
    return 0;
}

以上wa掉

#include<bits/stdc++.h>
using namespace std;
struct D{
    int nxt,to;
}d[200001];
int l[200001],w,n,m,a,b,h[200001],v[200001];
queue<int>q;
void xx(int x,int y)
{
    d[++w].nxt=h[x]; 
    d[w].to=y;
    h[x]=w;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>a>>b;
        xx(a,b);
        l[b]++;
    }
    for(int i=1;i<=n;i++)
    {
        if(!l[i])
        {
            q.push(i);
            v[i]=1;
        }
    }
    while(!q.empty())
    {
        int x1=q.front();
        for(int i=h[x1];i;i=d[i].nxt)
        {
            l[d[i].to]--;
            if(!l[d[i].to])
            {
                v[d[i].to]=v[x1]+1;
                q.push(d[i].to);
            }
        }
        q.pop();
    }
    for(int i=1;i<=n;i++)
    cout<<v[i]<<endl;
    return 0;
}

以上ac 有谁能说说原因吗??

@henry_y 2018-06-27 16:33 回复

这是评测状态出锅了吧

各种状态经常互换

反正您这个是MLE