HDU2066:一个人的旅行

Problem Description
虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。

Input
输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;
接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
接着的第T+1行有S个数,表示和草儿家相连的城市;
接着的第T+2行有D个数,表示草儿想去地方。

Output
输出草儿能去某个喜欢的城市的最短时间。

Sample Input
6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10

Sample Output
9
开始用了Floyd的算法,无奈超时,因为一开始没有往单元最短路上想,以为是数组初始化上超时,后来看了别人的博客,才发现此题可以用Dijkstra来解,把草儿的家看做一个点,到其最近的车站的费用为0(真是巧妙的想法)。这样,这个题就完完全全变成了单元最短路的问题!
code:

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include <algorithm>
using namespace std;

const int INF=0x3f3f3f3f;
const int N=1005;
int n;
int mp[N][N];
int dp[N],vis[N];

void Dijkstra() //单源最短路
{
int i,j;
int x,t;
memset(vis,0,sizeof(vis));
for (i=0;i<n;i++) dp[i]=mp[0][i];
vis[0]=1;
for (i=0;i<n;i++)
{
t=INF;
for (j=0;j<n;j++)
if (!vis[j]&&dp[j]<t) x=j,t=dp[x];
if (t>=INF) break;
vis[x]=1;
for (j=0;j<n;j++)
if (!vis[j])
dp[j]=min(dp[j],dp[x]+mp[j][x]);
}
}

int main(){

int T,S,D;
while (cin>>T>>S>>D)
{
int i,j;
int u,v,w;
int s,t;
n=-1;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
mp[i][j]=(i==j?0:INF);
memset(mp,INF,sizeof(mp));
for(i=0;i<T;i++)
{
scanf("%d%d%d",&u,&v,&w);
n=max(n,max(u,v));
if(mp[u][v]>w)
mp[u][v]=mp[v][u]=w;
}
n++;
for (i=0;i<S;i++)
{
scanf("%d",&s);
mp[0][s]=mp[s][0]=0;
}
Dijkstra();
int ans=INF;
for (i=0;i<D;i++) //找出最小的费用即可
{
scanf("%d",&t);
ans=min(dp[t],ans);
}
printf("%d\n",ans);
}
return 0;
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win11 vmware 安装Ubuntu 连接xshell

安装 open ssh&#xff1a; sudo apt-get install openssh-server 修改root密码 #sudo passwd root 辑配置文件&#xff0c;允许以 root 用户通过 ssh 登录&#xff1a; sudo vi /etc/ssh/sshd_config 找到&#xff1a;PermitRootLogin prohibit-password禁用 添加&…

链表面试大全

链表面试 血与泪的教训是&#xff0c;必须要全部手写&#xff0c;而且要熟练。 面试的时间本来就短&#xff0c;到~到 到时 ~ 到时候 一 一 一张紧&#xff0c;就更做不出来了 第一题 链表相加 2. 两数相加 141. 环形链表 golang 160. 相交链表 206. 反转链表 237. 删除链表中…

送东阳马生序

余幼时即嗜学。家贫&#xff0c;无从致书以观&#xff0c;每假借于藏书之家&#xff0c;手自笔录&#xff0c;计日以还。天大寒&#xff0c;砚冰坚&#xff0c;手指不可屈伸&#xff0c;弗之怠。录毕&#xff0c;走送之&#xff0c;不敢稍逾约。以是人多以书假余&#xff0c;余…

hdu 2112 ——HDU Today

Problem Description 经过锦囊相助&#xff0c;海东集团终于度过了危机&#xff0c;从此&#xff0c;HDU的发展就一直顺风顺水&#xff0c;到了2050年&#xff0c;集团已经相当规模了&#xff0c;据说进入了钱江肉丝经济开发区500强。这时候&#xff0c;XHD夫妇也退居了二线&am…

vim如何自动补全,ycm配置

vimplus已经很完善了&#xff0c;现在安装已经很容易了。 git clone https://github.com/chxuan/vimplus.git ~/.vimplus cd ~/.vimplus ./install.sh Ubuntu配置vim 更新2018年11月8号 用了一段时间的Ubuntu 18简直太方便了。 三步操作全部配完&#xff01;&#xff01;&a…

快速幂取模算法模板

在Miller Rabbin测试素数&#xff0c;就用到了快速幂取模的思想。这里总结下。求a^b%c&#xff08;这就是著名的RSA公钥的加密方法&#xff09;&#xff0c;当a,b很大时&#xff0c;直接求解这个问题不太可能 算法1&#xff1a;利用公式a*b%c((a%c)*b)%c,这样每一步都进行这种处…

学脚本的忠告——我觉得语言大多这样了

1.不要看到别人的回复第一句话就说&#xff1a;给个代码吧&#xff01;你应该想想为什么。当你自己想 出来再参考别人的提示&#xff0c;你就知道自己和别人思路的差异。2.初学者请不要看太多太多的书那会误人子弟的&#xff0c;先找本系统的学&#xff0c;很多人用了很久 都是…

hdu 1317——XYZZY

http://blog.csdn.net/dongshimou/article/details/35984917

UVA10843——Anne\'s game

Lily: “Chantarelle was part of my exotic phase.” Buffy: “It’s nice. It’s a mushroom.” Lily: “It is? That’s really embarrassing.” Buffy: “Well, it’s an exotic mushroom, if that’s any comfort.” Joss Whedon, "Anne". A little girl whose…

在kali Linux中搭建DVWA

1、 由于所发教程前几步没有实现&#xff0c;故直接打开浏览器输入localhost/1.php&#xff0c;打开后即为所要页面 2、用cd /var/www/html 命令进入apache web目录 3、用wget https&#xff1a;//github.com/ethicalhack3r/DVWA/archive/master.zip (注意&#xff1a;ethic…

数组名与函数的结合使用注意项

数组名即数组的首地址&#xff0c;故数组名属于指针变量&#xff0c;在定义函数使数组名作为形参时&#xff0c;要把对应的参数定义为指针变量。因为数组没有特定的使其读入停止的标志&#xff0c;因此还要有确定数组长度的参数&#xff0c;即用户自己输入数组长度。 代码如下…

uva 10883——Supermean

Do you know how to compute the mean (or average) of n numbers? Well, thats not good enough for me. I want the supermean! "Whats a supermean," you ask? Ill tell you. List the n given numbers in non-decreasing order. Now compute the average of ea…

-又见GCD -- ACM解决方法

有三个正整数a,b,c(0<a,b,c<10^6)&#xff0c;其中c不等于b。若a和c的最大公约数为b&#xff0c;现已知a和b&#xff0c;求满足条件的最小的c。 Input 第一行输入一个n&#xff0c;表示有n组测试数据&#xff0c;接下来的n行&#xff0c;每行输入两个正整数a,b。 Ou…

Cake -- ACM解决方法

一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食. Input 每行有两个数p和q. Output 输出最少要将蛋糕切成多少块. Sample Input 2 3 Sample Output 4 …

vi 的 使用

vi &#xff08;Linux下的文本编辑器&#xff09; a 在光标后添加文本A 在本行行末添加文本i 在光标前插入文本I 在本行开始插入文本o 在光标下插入新行O 在光标上插入新行dd 删除光标所在行 &#xff08;2dd即删除此下的两行&#xff0c;3dd以此类推&#xff09;p 粘贴&#…

卡特兰数的性质及其应用扩展

问题描述&#xff1a;卡塔兰数&#xff0c;是组合数学中一个常出现在各种计数问题中出现的数列。输入一个整数n&#xff0c;计算h(n)。其递归式如下&#xff1a;h(n) h(0)*h(n-1)h(1)*h(n-2) ... h(n-1)h(0) (其中n>2&#xff0c;h(0) h(1) 1) 该递推关系的解为&…

Linux 部分常用命令

屏幕切换 Ctrl Alt F1 &#xff5e; F6 切换为图形界面Ctrl Alt F7 切换为字符界面 基本命令 ifconfig 查看ip &#xff08;Windows中是 ipconfig &#xff09;halt 关机 &#xff08;或 shutdown -h now&#xff09;reboot 重启tab 自动补全Ctrl U 清空至行首Ctrl K 清空至…

汉诺塔V - ACM解决方法

Problem Description 用1,2,...,n表示n个盘子&#xff0c;称为1号盘&#xff0c;2号盘,...。号数大盘子就大。经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事&#xff0c;上帝创造世界时作了三根金刚石柱…

uva 10692——Huge Mods

题目大意&#xff1a;给定第一个数M&#xff0c;后面有n的数&#xff0c;求解a[1]^a[2]^a[3]^…..%m的解 思路&#xff1a;开始的时候并不知道从哪里下手&#xff0c;一开始收到前面某题除4的印象&#xff0c;然后一直对4取余&#xff0c;知道a[1],计算后发现那一套只适用于求解…

笨小熊 -- ACM解决方法

描述 笨小熊的词汇量很小&#xff0c;所以每次做英语选择题的时候都很头疼。但是他找到了一种方法&#xff0c;经试验证明&#xff0c;用这种方法去选择选项的时候选对的几率非常大&#xff01; 这种方法的具体描述如下&#xff1a;假设maxn是单词中出现次数最多的字母的出现…