旅行计划,求救大佬,最后一点wa

回复帖子

@念及 2018-08-11 17:30 回复

求救,最后一个点wa; 代码如下:

include<iostream>

include<stack>

include<cstdio>

include<vector>

include<cstring>

using namespace std; stack<int>mystack; vector<int> path;//path储存路径,out储存输出层 int v[100001],u[100001],into[100001],first[100001],next[100001],ans[100001]; int n,m; int dfs(int p,int q); int main() {
cin>>n>>m; for(int i=1;i<=n;i++)
first[i]=next[i]=-1;
for(int i=1;i<=m;i++) {
scanf("%d%d",&u[i],&v[i]); next[i]=first[u[i]]; first[u[i]]=i; into[v[i]]++; } for(int i=1;i<=n;i++) if(into[i]==0) { mystack.push(i); path.push_back(i); } while(!mystack.empty()) { int e=mystack.top(); mystack.pop();

     for(int i=first[e];i!=-1;i=next[i])
        {
        into[v[i]]--;
        if(into[v[i]]==0)
        {mystack.push(v[i]);    
         path.push_back(v[i]);
         }
    }
}

for (int i=1;i<=n;i++) ans[i]=1;
for(int i=0;i<path.size();i++)
{
    int u=path[i];
    for(int j=first[u];j!=-1;j=next[j])
    {
        int r=v[j];
        ans[r]=max(ans[r],ans[u]+1);//DP公式
    }

}
for(int i=1;i<=n;i++)

printf("%d\n",ans[i]); return 0; }