• 洛谷 P1137 旅行计划


    先进行拓扑排序得到拓扑序
    之后按拓扑序dp求最大值

    #include<cstdio>
    #include<iostream>
    using namespace std;
    const int MAX=100005;
    
    int n,m,cnt;
    int head[MAX],top[MAX],sta[MAX],ans[MAX],du[MAX];
    
    struct edg{
        int to,next;
    }edge[MAX*2];
    
    void add(int x,int y){
        edge[++cnt].next=head[x];
        edge[cnt].to=y;
        head[x]=cnt;
    }
    
    void tpsort(){//拓扑排序 top即拓扑序
        int tot=0,hea=1,tai=0;
        for(int i=1;i<=n;i++)
            if(!du[i]) sta[++tai]=top[++tot]=i;
        while(hea<=tai){
            int u=sta[hea];
            for(int i=head[u];i;i=edge[i].next){
                int v=edge[i].to;
                du[v]--;
                if(!du[v]) sta[++tai]=top[++tot]=v;
            }
            hea++;
        }
    }
    
    int main(){
        scanf("%d %d",&n,&m);
        for(int i=1;i<=m;i++){
            int a,b;
            scanf("%d %d",&a,&b);
            add(a,b);
            du[b]++;
        }
        tpsort();
        for(int i=1;i<=n;i++){
            int u=top[i];
            for(int j=head[u];j;j=edge[j].next){
                int v=edge[j].to;
                ans[v]=max(ans[u]+1,ans[v]);//简单dp
            }
        }
        for(int i=1;i<=n;i++) printf("%d
    ",ans[i]+1);
        return 0;
    }                                             
    版权声明:本文为博主原创文章,未经博主允许不得转载。 博主:https://www.cnblogs.com/Menteur-Hxy/
  • 相关阅读:
    leetcode 92. 反转链表 II
    leetcode记录1 快速排序
    Jmeter入门总结
    Jmeter 元件作用域、集合点、检查点
    Jmeter 实例
    badboy脚本开发
    Jmeter 常用功能介绍
    简单的自创线程池
    多线程
    IO多路复用
  • 原文地址:https://www.cnblogs.com/Menteur-Hxy/p/9248049.html
Copyright © 2020-2023  润新知