首页 > 其他分享 >最长路径

最长路径

时间:2022-11-20 12:23:15浏览次数:69  
标签:int 路径 fa flag 顶点 最长 dp

最长路径

给定一个正权有向无环图和图中的两个顶点,请编写程序找出这两个顶点间的最长路径,若两点间存在多条最长路径,则输出字典序最小者。假定图中包含n个顶点,编号为0至n-1。

注:字典序,即对象在字典中的顺序。对于两个数字序列,从第一个数字开始比较,当某一个位置的数字不同时,该位置数字较小的序列,字典序较小,例如1 2 3 9比1 2 4 5小,1 2 8 9比1 2 10 3小。

输入格式:

输入第一行为3个正整数n和e,分别为图的顶点数和边数,均不超过50。接下来e行表示每条边的信息,每行为3个整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。接下来1行为两个整数s和t,表示两个顶点编号。

输出格式:

输出顶点s到顶点t的字典序最小最长路径,路径中顶点编号用“->”间隔。如s和t不连通,则输出“none”。

思路:

拓扑排序+简单dp,由于正向取点时不同路径之间的长度不一致,字典序判断不易,可考虑反向加边

#include <bits/stdc++.h>
using namespace std;
int n,m,dp[2005],flag,head[2005],in[2005],fa[2005],si,r,s;
struct node{
    int to,next,x;
}p[2005]; 
void add(int x,int y,int k){
    p[++flag].to=y;
    p[flag].next=head[x];
    p[flag].x=k;
    head[x]=flag;
    in[y]++;
}
void tuopu(){
    queue<int> q;
    for(int i=0;i<n;i++){
        if(!in[i]) q.push(i);
        dp[i]=-1e9;
    } 
    dp[r]=0;
    while(!q.empty()){
        int x=q.front();
        q.pop();
        for(int i=head[x];i;i=p[i].next){
            if(dp[x]+p[i].x>dp[p[i].to]){
                dp[p[i].to]=dp[x]+p[i].x;
                fa[p[i].to]=x;
            }
            else if(dp[x]+p[i].x==dp[p[i].to]){
                if(fa[p[i].to]>x)
                    fa[p[i].to]=x;
            }
            in[p[i].to]--;
            if(!in[p[i].to]&&s!=x) q.push(p[i].to);
        }
    }   
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        add(b,a,c);
    }
    cin>>s>>r;
    tuopu();
    if(dp[s]==-1e9) cout<<"none";
    else{
        while(r!=s){
            cout<<s<<"->";
            s=fa[s];
        }
        cout<<s;
    }
} 
     

标签:int,路径,fa,flag,顶点,最长,dp
From: https://www.cnblogs.com/consonnm/p/16908202.html

相关文章

  • Windows11 Docker镜像存储路径更改(非C盘路径)
    https://blog.csdn.net/Ber_Bai/article/details/120816638?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v......
  • 字符串练习2 最长抑或路径(01trie树)
    题目链接在这里:​​P4551最长异或路径-洛谷|计算机科学教育新生态(luogu.com.cn)​​是一道比较经典的问题,对于异或问题经常会使用01trie树来解决。当然01trie树只是......
  • 庆军之热拔插系统--action路径的问题
    过程,controller下的路由是怎么来的。最后落到了,DefaultApplicationModelProvider下面的CreateActionModel,参考来自此,(78条消息).netcore入门13:aspnetcore源码之如何在程......
  • 437.路径总和III
    给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但......
  • leetcode_Day1_14最长公共前缀
    1.题目  2.解一  主要思路:横向比较,字符串数组的公共前缀等于前两个字符串的公共前缀与第三个字符串比较,再与第四个比较。即依次遍历字符串数组中的每个字符串,对......
  • 系统找不到指定路径(德鲁伊)
     进行德鲁伊配置时,运行代码,发现系统找不到指定路径 将上方代码注释掉,我们需要打印出这句话  查找该路径  复制粘贴查找该路径  复制其中路径修改代码......
  • 【VRP问题】基于蚁群算法求解配送路径最短问题附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 更改pip安装路径
    pipshowmatplotlib查看安装位置去python环境下lib/site.py文件里修改user_site和user_baseUSER_SITE,更改为anaconda的Lib文件夹下的site-packages文件夹。USER_BASE,更......
  • day18-web工程路径
    web工程路径配置tomcat运行快捷键tomcat启动的默认快捷键时shift+f10,可以自定义配置:file-setting-keymap-搜索run,找到右边写有shift+f10的选项,右击选择addkeyboardsh......
  • 欧拉路径
    参考资料:OI-wiki首先让我们明确几个概念.我们定义,通过图中所有边恰好一次的通路称为欧拉通路,若该路为回路则称为欧拉回路.若一个图存在欧拉回路,则称该图为欧拉......