51nod 1649 齐头并进 (djikstra求最短路径,只用跑一次)
题目:
这道题有一个坑点:两种交通工具同时出发,中途不能停留在同一个小镇。
其实想通了就很简单,因为要么火车一步到达,要么汽车一步到达。不可能停留在同一个地方。
可是我还WA了好几次,蠢哭。想用BFS写,一直TLE,后来想到这点之后,用djikstra求单源最短路径就出来了。
如果火车一步到,就求汽车的单源最短路径;如果汽车一步到,就求火车的单源最短路径。
代码:
- #include <iostream>
- #include <algorithm>
- #include <map>
- #include <vector>
- #include <set>
- #include <math.h>
- #include <queue>
- #include <assert.h>
- #include <stdio.h>
- #include <stdlib.h>
- using namespace std;
- typedef long long ll;
- //#define INF 2147483647
- #define INF 2000000000
- int n,m;
- #define MAX_V 410
- int cost[MAX_V][MAX_V]; //cost[u][v]表示e = (u,v)的权值
- int d[MAX_V]; //源点s出发的最短距离
- bool used[MAX_V]; //标记使用过的点
- int djikstra(){
- fill(d,d+n+,INF);
- fill(used,used+n,false);
- d[] = ;
- while(true){
- int v = -;
- for(int i = ;i <= n; i++){
- if(!used[i]&&(v == - || d[i] < d[v])) v = i;
- }
- if(v == -) break;
- used[v] = true;
- for(int i = ;i <= n; i++){
- if(cost[v][i] == ){
- d[i] = min(d[i],d[v]+cost[v][i]);
- }
- }
- }
- if(d[n] == INF) return -;
- else return d[n];
- }
- int main() {
- cin >> n >> m;
- for(int i = ;i <= n; i++){
- for(int j = ;j <= n; j++){
- cost[i][j] = -;
- if(i == j) cost[i][j] = ;
- }
- }
- for(int i = ;i <= m; i++){
- int u,v;
- cin >> u >> v;
- cost[u][v] = ;
- cost[v][u] = ;
- }
- if(cost[][n] == ){
- for(int i = ;i <= n; i++){
- for(int j = ;j <= n; j++){
- cost[i][j] = -cost[i][j];
- }
- }
- }
- cout << djikstra() << endl;
- return ;
- }
51nod 1649 齐头并进 (djikstra求最短路径,只用跑一次)的更多相关文章
- 51nod 1649.齐头并进-最短路(Dijkstra)
1649 齐头并进 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 在一个叫奥斯汀的城市,有n个小镇(从1到n编号),这些小镇通过 ...
- 51Nod 1649 齐头并进
#include <iostream> #include <algorithm> #include <cstring> //两遍迪杰斯特拉 #define INF ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径
自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...
- 求最短路径算法之SPAF算法。
关于求最短路径: 求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了.最熟悉的无疑是Dijkstra(不能求又负权边的图),接着是Bellman-Ford,它们都可以求出由 ...
- Spfa求最短路径
spfa求最短路径,其思想就是遍历每一个点,将没有入队的点入队,从这个点开始不断修改能够修改的最小路径,直到队空.不过这里一个点可以重复入队. 这个需要有存图的基础--------->前向星存图 ...
- Dijkstra算法求最短路径(java)(转)
原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...
- js迪杰斯特拉算法求最短路径
1.后台生成矩阵 名词解释和下图参考:https://blog.csdn.net/csdnxcn/article/details/80057574 double[,] arr = new double ...
- POJ 2387 Til the Cows Come Home Dijkstra求最短路径
Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to get as much s ...
随机推荐
- webform 下使用autofac
官网介绍: http://docs.autofac.org/en/latest/integration/webforms.html#quick-start HTTP 错误 500.22 - Inter ...
- 后台通过Request取得多个含有相同name的控件的值
string[] arrWeight = context.Request.Params.GetValues("Quantity");
- Golden Gate 概述
概述: 是什么?Oracle GoldenGate 提供异构环境间事务数据的实时.低影响的捕获.路由.转换和交付. 非侵入: 不建触发器,不建中间表,无需增量标记或时间戳字段 不在源表上进行数据查询 ...
- 用IIS怎样在局域网内建网站
IIS服务器组建一览 IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器.FTP服务器.NNTP服务器和SMTP服务器, ...
- 小程序全局状态管理,在页面中获取globalData和使用globalSetData
GitHub: https://github.com/WozHuang/mp-extend 主要目标 微信小程序官方没有提供类似vuex.redux全局状态管理的解决方案,但是在一个完整的项目中各组件 ...
- java中内存溢出和内存泄漏的区别
虽然在java中我们不用关心内存的释放, 垃圾回收机制帮助我们回收不需要的对象,但实际上不正当的操作也会产生内存问题:如,内存溢出.内存泄漏 内存溢出:out of memory:简单通俗理解就是内存 ...
- vue通过路由实现页面刷新
vue 开发微信商城项目,需求如下: 购物车页面跳转到详情页,购物车页面包含了多个组件,点击结算跳转到订单页面,从订单返回时,购物车页面没有刷新,由于购物车组件之间通过bus实现事件传递,页面跳转(非 ...
- 2019-03-18 使用Request POST获取CNABS网站上JSON格式的表格数据,并解析出来用pymssql写到SQL Server中
import requests import pymssql url = 'https://v1.cn-abs.com/ajax/ChartMarketHandler.ashx' headers = ...
- NOIP2018提高组省一冲奖班模测训练(二)
比赛链接 NOIP2018提高组省一冲奖班模测训练(二) 今天发挥正常,昨天不在状态…… 花了很久A了第一题 第二题打了30分暴力 第三题投机取巧输出test1答案(连暴力都不知道怎么打,太弱了) 2 ...
- Selenium:简单的尝试一下
一.创建maven工程引入依赖 1)创建项目 创建一个简单的maven工程即可 这里我使用jar项目进行简单的演示 2)引入依赖 <dependencies> <dependency ...