P1137 旅行计划

Posted xmex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1137 旅行计划相关的知识,希望对你有一定的参考价值。

技术分享图片

技术分享图片

技术分享图片

技术分享图片

/*拓扑排序去寻找点的拓扑序
便于DP,那么怎么去找
首先邻接表存边,然后dfs搜寻每一个点
最后进行拓扑排序,找到拓扑序*/
#include<bits/stdc++.h>
const int maxn = 100005;
const int maxm = 200005;
using namespace std;
int n,m,p=1;
int a,b;
int dp[maxn];
int h[maxn],v[maxm],zrj[maxm];
void add(int a,int b)
{
    zrj[p]=h[b];
    h[b]=p;
    v[p]=a;
    p++;
}
int dfs(int y,int x)
{
    if (dp[x]) return dp[x];
    for (int j=h[x],u=v[j]; j; j=zrj[j],u=v[j])
    {
        dp[x]=max(dfs(y+1,u)+1,dp[x]);
    }
    return dp[x];
}
int main()
{
    cin>>n>>m;
    for (int i=1; i<=m; i++)
    {
        cin>>a>>b;
        add(a,b);
    }
    for (int i=n; i>=1; i--)
        dfs(1,i);
    for (int i=1; i<=n; i++)
        cout<<dp[i]+1<<endl;
    return 0;
}

 

以上是关于P1137 旅行计划的主要内容,如果未能解决你的问题,请参考以下文章

P1137 旅行计划

洛谷P1137 旅行计划

P1137 旅行计划

luogu P1137 旅行计划 题解

洛谷P1137 旅行计划 拓扑排序 图论

P1137 旅行计划