hdu1599find the mincost route

2024-05-05 05:48
文章标签 route mincost hdu1599find

本文主要是介绍hdu1599find the mincost route,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目大意:

    在一个图里面找至少有三条边的无向环的最短路径。如果不存在有三条边以上的无向环则输出"It's impossible.".

解题思路:

    带环了,所以就采用floyd算法吧,因为其它几种都是适用于单源的。

    先上图;

    

       至少三条边以上,按照一般思路的话,既然是最短路径,那我们肯定是边越少越好。但是从上图就可以看出,这个观点是显然不成立的。如1--3--5--1这个环的路径就要比1--2--3--4--5--1这个环的路径要长。

       我们发现这两个环的最后两个顶点都是5---1,那么我们可不可以先将1--2--3--4给先压缩成一条边呢?当然可以啊,现在研究的不就是最短路么,就是说求1---4的最短路径,我们就用dis[1][4]表示好了。插叙一句,这个图用矩阵mp[n][n]表示,求出了1到4的最短路径,然后这个环就变成了1--4--5--1了,当然这个环的路径也就是dis[1][4]+mp[4][5]+map[5][1].

       所以我们就是要一边维护一个dis[i][j]数组,表示i到j的最短路径,一边更新一个最小值mini,在这里需要注意的是为了避免经过相同的点,应该在dis[i][j]将k加入更新之前就应该更新ans,只有这样才能完全避免点k被使用两次!

#include<stdio.h>
#define N 100
#define inf 0xfffffff
int ans;
int mp[N][N],dis[N][N];
inline int mmin(int a,int b){return a<b?a:b;
}
void initi(int n){int i,j;for(i=0;i<=n;i++)for(j=0;j<=n;j++)mp[i][j]=dis[i][j]=inf;ans=inf;
}
void floyd(int n){int i,j,k;for(k=1;k<=n;k++){for(i=1;i<k;i++)for(j=1+i;j<k;j++)ans=mmin(ans,(dis[i][j]+mp[j][k]+mp[k][i]));for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(i!=j&&j!=k&&i!=k)//不能用j=i+1<k的方法,必须将dis[i][j]和dis[j][i]都更新dis[i][j]=mmin(dis[i][k]+dis[k][j],dis[i][j]);}}
}
int main()
{int i,j,n,m,temp;int a,b,c;while(scanf("%d%d",&n,&m)!=EOF){initi(n);for(i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&c);if(c<mp[a][b]){mp[a][b]=mp[b][a]=dis[a][b]=dis[b][a]=c;}}floyd(n);if(ans==inf)printf("It's impossible.\n");else{printf("%d\n",ans);}}
}





这篇关于hdu1599find the mincost route的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/960916

相关文章

Linux 路由表之route 命令详解

参考资料 Linux 内核的路由表 通过 route 命令查看 Linux 内核的路由表: [root@VM_139_74_centos ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault

Mincost

1031: Mincost 时间限制: 1 Sec   内存限制: 128 MB 提交: 303   解决: 88 [ 提交][ 状态][ 讨论版] 题目描述 The cost of taking a taxi in Hangzhou is not a constant for each kilometer you travel: the first 4 kilometers

VUE之Router命令行警告:Named Route ‘Home‘ has a default child route. 解决办法

Named Route ‘Home’ has a default child route. When navigating to this named route (:to=“{name: ‘Home’”), the default child route will not be rendered. Remove the name from this route and use the name

使用 route 和 ifconfig 命令配置 Linux 路由表的详细指南

在 Linux 的早期版本中,ifconfig 和 route 命令是配置网络接口和路由表的标准工具。虽然在现代 Linux 发行版中这些工具逐渐被 ip 命令所取代,但它们仍然广泛存在于许多系统中,尤其是在旧版本的 Linux 上。本文将详细介绍如何使用 ifconfig 和 route 命令来管理和配置 Linux 系统的网络接口和路由表。 一、基本网络配置 首先,我们需要了解如何使用 i

网络路由介绍,route指令,查询路由表的过程,默认路由

目录 路由 本地主机的路由功能 引入 route指令  查询路由表的过程 介绍 示例 默认路由 注意 路由 本地主机的路由功能 引入 报文经过多个路由器转发至公网,再从公网定位后转发至私网,最终到达目标主机 而报文肯定是要先经过本地主机的 所以本地主机也具有路由功能,也就有自己的路由表 route指令  从左到右介绍是: 当前主机可以连接到的网络/主机(

uva1349 Optimal Bus Route Design 费用流,二分图匹配

题意:n个景点和一些路径,找到任意数目的路径,路径是一个环,使每个景点仅属于一个环,使权值最小。 分析:每个景点的入度和出度都是1,拆分每个景点u,u',若输入u-v,建立u-v'的边,是一个二分图,若存在完美匹配,说明存在若干个环使每个景点属于其中一个环。增加一个起点s和终点t,边权为费用,所有边的容量都为1,求最小费用最大流,若flow==节点数,存在完美匹配,cost即为答案。 #i

ROUTE_STATUS

ROUTE_STATUS是一个只读属性,由Vivado路由器分配给网络 反映网络上路由的当前状态。 该属性可以由单个网络或一组网络使用 get_property或report_property命令。该物业由 report_route_status命令返回整个设计的route_status。 架构支持 所有架构。 适用对象 •网络(get_Nets) 价值观 •路由:网已完全放置并路由。 •部分:放

华为---理解OSPF Route-ID(五)

9.5 理解OSPF Route-ID 9.5.1 原理概述 一些动态路由协议要求使用Router-ID作为路由器的身份标示,如果在启动这些路由协议时没有指定Router-ID,则默认使用路由器全局下的路由管理Router-ID。 Router-ID选举规则为,如果通过Router-ID命令配置了Router-ID,则按照配置结果设置。在没有配置Router-ID的情况下,如果存在配置了IP

dial tcp 10.96.0.1:443: connect: no route to host

1、创建Pod一直不成功,执行kubectl describe pod runtime-java-c8b465b98-47m82 查看报错   Warning  FailedCreatePodSandBox  2m17s                kubelet            Failed to create pod sandbox: rpc error: code = Unkno

Linux指令--route

Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table)。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址