COGS 2. 旅行计划
2. 旅行计划
★☆ 输入文件:djs.in 输出文件:djs.out 简单对比
时间限制:3 s 内存限制:128 MB
过暑假了,阿杜准备出行旅游,他已经查到了某些城市的两两之间的距离及可行路线(可行路线有方向),如下图所示。请你编程计算从阿杜所住城市到其它城市的最短路径以帮助阿杜制定旅行计划。

【输入格式】
输入由若干行组成,第一行有三个整数,$n(1≤n≤100)、m(1≤m≤n^2)、v(1≤m≤n)$;城市数,$m$城市间道路数,$v$是阿杜所住城市。第$2$至$m+1$行是每条路的信息,每行三个整数,为道路的起点、终点和两城市间距离。(城市从0开始编号)
【输出格式】
n组(按城市编号由小至大),每组三行
第一行:城市编号及一个冒号
第二行:path及一个冒号,后面是最短路径节点编号序列(编号间用一个空格隔开)
第三行:cost及一个冒号,后面是一个整数,表示路径距离
如果没有通路则输出 no
【输入样例】
6 8 0
0 2 10
0 4 30
0 5 100
1 2 5
2 3 50
3 5 10
4 3 20
4 5 60
【输出样例】
0:
no
1:
no
2:
path:0 2
cost:10
3:
path:0 4 3
cost:50
4:
path:0 4
cost:30
5:
path:0 4 3 5
cost:60
AC代码:
#include<cstdio>
#include<cstring>
#include<queue>
#define pir pair<int,int>
using namespace std;
const int N=1e5+;
struct node{
int v,w,next;
}e[N<<];
int tot,head[N];
int n,m,S,dis[N],qq[N];
bool vis[N];
void add(int x,int y,int z){
e[++tot].v=y;
e[tot].w=z;
e[tot].next=head[x];
head[x]=tot;
}
void dijkstra(){
priority_queue<pir,vector<pir>,greater<pir> >q;
memset(dis,0x3f3f3f3f,sizeof dis);
q.push(make_pair(dis[S]=,S));
while(!q.empty()){
pir h=q.top();q.pop();
int x=h.second;
if(vis[x]) continue;
vis[x]=;
for(int v,w,i=head[x];i;i=e[i].next){
v=e[i].v;w=e[i].w;
if(!vis[v]&&dis[v]>dis[x]+w){
q.push(make_pair(dis[v]=dis[x]+w,v));
qq[v]=x;
}
}
}
}
void out(int x){
if(qq[x]==-) return ;
out(qq[x]);
printf("%d ",x);
}
int main(){
freopen("djs.in","r",stdin);
freopen("djs.out","w",stdout);
memset(qq,-,sizeof qq);
scanf("%d%d%d",&n,&m,&S);
for(int i=,x,y,z;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
dijkstra();
for(int i=;i<n;i++){
if(i==S) printf("%d:\nno\n",S);
else if(dis[i]==0x3f3f3f3f) printf("%d:\nno\n",i);
else{
printf("%d:\n",i);
printf("path:%d ",S);out(i);putchar('\n');
printf("cost:%d\n",dis[i]);
}
}
fclose(stdin);
fclose(stdout);
return ;
}
COGS 2. 旅行计划的更多相关文章
- cogs 2. 旅行计划 dijkstra+打印路径小技巧
2. 旅行计划 ★★ 输入文件:djs.in 输出文件:djs.out 简单对比时间限制:3 s 内存限制:128 MB [题目描述] 过暑假了,阿杜准备出行旅游,他已经查到了某些城市 ...
- Crash的旅行计划
除草了.. Crash的旅行计划 [问题描述] 过不了多久,Crash就要迎来他朝思暮想的暑假.在这个暑假里,他计划着到火星上旅游.在火星上有N个旅游景点,Crash用1至N这N个正整数对这些景点标号 ...
- 【51Nod】1273 旅行计划 树上贪心
[题目]51Nod 1273 旅行计划 [题意]给定n个点的树和出发点k,要求每次选择一个目的地旅行后返回,使得路径上未访问过的点最多(相同取编号最小),旅行后路径上所有点视为访问过,求旅行方案.\( ...
- 51nod 1273 旅行计划——思维题
某个国家有N个城市,编号0 至 N-1,他们之间用N - 1条道路连接,道路是双向行驶的,沿着道路你可以到达任何一个城市.你有一个旅行计划,这个计划是从编号K的城市出发,每天到达一个你没有去过的城市, ...
- 洛谷P1137 旅行计划
P1137 旅行计划 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制 ...
- 洛谷 P1137 旅行计划
旅行计划 待证明这样dp的正确性. #include <iostream> #include <cstdio> #include <cstring> #includ ...
- 51nod-1273: 旅行计划
[传送门:51nod-1273] 简要题意: 给出一棵树,点数为n,现在你有一个旅行计划,从k城市出发,每天前往一个没去过的城市,并且旅途中经过的没有去过的城市尽可能的多(如果有2条路线,经过的没有去 ...
- 牛客-小a的旅行计划 + 数学推导
小a的旅行计划 题意: 小a终于放假了,它想在假期中去一些地方游玩,现在有N个景点,编号为,同时小b也想出去游玩.由于一些特殊♂原因,他们的旅行计划必须满足一些条件 首先,他们可以从这N个景点中任意选 ...
- Problem 2 旅行计划 (travelling .cpp)———2019.10.6
lth tql,lzpclxf tql Orz Problem 2 旅行计划 (travelling.cpp)[题目描述]小 Z 打算趁着暑假,开启他的旅行计划.但与其他同学不同的是,小 Z 旅行时并 ...
随机推荐
- OC中的Block的那些事
Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动 ...
- iOS sqlite3 的基本使用(增 删 改 查)
iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...
- Spring MVC 原理小结
主要由DispatcherServlet.处理器映射.处理器.视图解析器.视图组成 1.DispatcherServlet接收到一个HTTP请求,根据对应配置文件中的处理机映射,找到处理器(Han ...
- intelliJ idea代码折叠
在intelliJ idea中不仅可以对类.方法等结构的代码进行折叠(ctrl+-)还可以自定义折叠代码.intelliJ支持两种风格的自定义代码折叠,如下: visual studio style ...
- jQuery添加options点击事件并传值
说明: 根据选择不同店铺选项,上送不同id值,展示不同商品列表 var formStr = "{'supplierId':'供应链企业|%-jm-sprt-%|93794498-3'}& ...
- 《Hey程序员 你适合加入创业公司吗?》再补充
笔者经过多年的走访发现,不是所有优秀的程序员都能在创业公司如鱼得水.根据笔者的经验,具备下面几点优秀品质的程序员会更容易适应创业公司的环境. 1.娴熟的调试技巧可以说,程序员的大部分时间都花在调试程序 ...
- oracle 分析函数的使用(1)
LISTAGG(columnName,'拼接符') WITHIN GROUP(ORDER BY clause) --order by 子句决定拼接内容的顺序 LISTAGG(columnName,'' ...
- 让UNION与ORDER BY并存于SQL语句当中
在SQL语句中,UNION关键字多用来将并列的多组查询结果(表)合并成一个结果(表),简单实例如下: SELECT [Id],[Name],[Comment] FROM [Product1] UNIO ...
- 【JavaScript】EasyUI框架的Dialog控件根据浏览器分辨率自动调节宽高
序: 如果单独一个或几个Dialog控件修改成根据浏览器可视界面自动调整高.宽很容易仅仅是一个量变的过程,但如果大量页面都引入了Dialog控件,修改起来是一个很消耗体力的工作.所以接到任务后第一想法 ...
- java中equals和"=="的区别
"=="号,它比较的是一个对象在内存中的地址值, 比如2个字符串对象String s1 = new String("str");String s2 = new ...