题目大意:

输入t;t为样例数

每个样例输入n,m;n 为顶点个数 m 为路径数

接下来m行  每行输入 u v w ;从 u 点到 v 点的路承重为 w

输出 车子若想通过 1~n的最短路 车重需限制在多少之内

Sample Input

1
3 3
1 2 3
1 3 4
2 3 5

Sample Output

Scenario #1:
4

邻接阵dijkstra

重点在此式 dis[i]=max(min(dis[ind],G[ind][i]),dis[i])

即更新 dis[] 时存入的应该是max(min(本条之前路径的承重限制,当前路段的承重限制),其他路径经过该点的承重限制)

经过同条路径 各个路段的承重限制 应选较小的

经过同一个点 各条路径的承重限制 应选较大的

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
int G[][];
int vis[],dis[];
void dijk()
{
while()
{
int maxi=-,ind;
for(int i=;i<=n;i++)
if(!vis[i] && dis[i]>maxi)
maxi=dis[i], ind=i;
if(maxi==-) break;
vis[ind]=;
for(int i=;i<=n;i++)
if(!vis[i])
dis[i]=max(min(dis[ind],G[ind][i]),dis[i]);
}
}
int main()
{
int t; scanf("%d",&t);
for(int j=;j<=t;j++)
{
scanf("%d%d",&n,&m);
memset(vis,,sizeof(vis));
memset(G,,sizeof(G));
while(m--)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
G[u][v]=G[v][u]=w;
} vis[]=;
for(int i=;i<=n;i++)
if(!vis[i]) dis[i]=G[][i];
dijk();
printf("Scenario #%d:\n%d\n\n",j,dis[n]);
} return ;
}

最新文章

  1. [LeetCode] Nth Highest Salary 第N高薪水
  2. 【20160722-20160728】NOI2016滚粗记&amp;&amp;酱油记&amp;&amp;游记
  3. SQl浅谈 索引
  4. 如何用 fiddler 调试线上代码
  5. EmitMapper的使用
  6. centos7 ip地址设置
  7. eclipse导入Android项目后,项目的名称变为了主Activity的名称
  8. Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory
  9. 7款纯CSS3实现的炫酷动画应用
  10. 九度OJ 1501 最大连续子序列乘积 -- 动态规划
  11. 《用chsh选择shell》-linux命令五分钟系列之十二
  12. free 堡垒机
  13. C# WinForm 和 javascript进行交互 使用HTML做界面
  14. SLF4J: Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder&quot;.
  15. JDK下载和安装
  16. Oracle数据库中的重要对象
  17. Linux 虚拟机忘记root密码
  18. (三十二)虚拟机linux系统中安装firefox浏览器
  19. redis 相关知识
  20. day10_cookie&amp;session学习笔记

热门文章

  1. Web API 接口参考
  2. OpenGL ANYTOOL
  3. 【代码工具】Lombok来优雅的编码
  4. thinkphp session支持
  5. Optimal Marks SPOJ - OPTM
  6. P1655 小朋友的球
  7. fastText一个库用于词表示的高效学习和句子分类
  8. 20140321 sizeof 虚函数与虚函数表 静态数组空间 动态数组空间 位字段
  9. 活动:月末送Java技术书福利|抽奖
  10. 13-Ubuntu-查阅终端命令版本信息和帮助信息