title: poj-3268最短路

date: 2018-10-13 15:54:34

tags:

  • acm
  • 刷题

    categories:
  • ACM-最短路

概述

这是一道最短路的模板题,,,不过虽然是模板题,,,还是有一些细节的,,,,QAQ

刚开始我的思路是建立一个汇点,,,然后求这个点为起点到终点x的最短路,,,再求终点到汇点的最短路,,,最后找一个和最大的,,,,这么想是因为和之前做的一道题很像,,,但像归像,,,终究不一样的,,,,这样还是求不出最后的结果,,,因为即使求出汇点到终点的最短路,,,但并不是每个点到终点的最短路,,,QAQ

分析思路

首先确定是单元最短路有关的题,,,而且题目保证正边,,,所以选择dijkstra解决,,,

其次,,,我之前好像还是单源最短路的理解不够清楚,,,

单源最短路一个最主要的性质就是所选起点到任意一点的最短路都可以求出来

这道题分成两部分,,一部分是所有点到终点x的最短路,,,另一个是终点到所有点的最短路,,,

显然后一部分可以直接调用一次dijkstra便可以求出,,,

而前者可以考虑反方向,,,所有点到终点的最短路就相当于沿相同的最短路从 终点x 到 每个点 的最短路,,,这个相同的最短路就是指:假如1到3的最短路是1->4->3那么他就等同于3->4->1,,,所以再求前一部分就可以将图中的每一条路的方向都取反方向,,,也就是逆图,,,这样一终点x为起点到各点的最短路就等于各点到终点x的最短路,,,

所以为了实现逆图选择 邻接矩阵 要比其他方式的存图要好一些,,,

实现

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <algorithm>
#include <cstring> using namespace std; const int maxn = 1e3 + 10;
//const int maxm = 1e5 + 10;
const int inf = 0x3f3f3f3f; int cost[maxn][maxn];
bool vis[maxn];
int dis1[maxn];
int dis2[maxn];
int cnt;
int n , m , x; void dijkstra(int n , int s , int dis[] , int cost[][maxn])
{
//init
for(int i = 1; i <= n; ++i)
dis[i] = (i == s) ? 0 : inf;
memset(vis , false , sizeof(vis)); for(int i = 0; i < n; ++i)
{
int k = -1;
int m = inf;
for(int j = 1; j <= n; ++j)
{
if(!vis[j] && dis[j] < m)
{
m = dis[j];
k = j;
}
}
if(k == -1) break;
vis[k] = true;
for(int j = 1; j <= n; ++j)
if(!vis[j] && dis[k] + cost[k][j] < dis[j])
dis[j] = dis[k] + cost[k][j];
}
} int main()
{
int u , v , w;
while(scanf("%d%d%d" , &n , &m , &x) != EOF)
{
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
{
if(i == j) cost[i][j] = 0;
else cost[i][j] = inf;
}
for(int i = 1; i <= m; ++i)
{
scanf("%d%d%d" , &u , &v , &w);
cost[u][v] = min(cost[u][v] , w);
}
dijkstra(n , x , dis1 , cost);
for(int i = 1; i <= n; ++i)
for(int j = 1; j < i; ++j)
swap(cost[i][j] , cost[j][i]);
dijkstra(n , x , dis2 , cost); int ans = 0;
for(int i = 1; i <= n; ++i)
ans = max(ans , dis1[i] + dis2[i]); printf("%d\n" , ans);
}
}

(end)

什么时候才能真正的感觉这才是水题啊,,,QAQ

poj-3268最短路的更多相关文章

  1. poj 3268 最短路dijkstra *

    题目大意:给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x,除了牛x之外的牛,他们都有一个参加聚会并且回来的最 ...

  2. POJ 3268 最短路应用

    POJ3268 题意很简单 正向图跑一遍SPFA 反向图再跑一边SPFA 找最大值即可. #include<iostream> #include<cstdio> #includ ...

  3. POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】

    Silver Cow Party Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Su ...

  4. POJ 3268 Silver Cow Party 最短路—dijkstra算法的优化。

    POJ 3268 Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbe ...

  5. DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards

    题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...

  6. POJ 3268 Silver Cow Party (最短路径)

    POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...

  7. Heavy Transportation POJ 1797 最短路变形

    Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你 ...

  8. POJ 3268 Silver Cow Party 最短路

    原题链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

  9. poj - 3268 Silver Cow Party (求给定两点之间的最短路)

    http://poj.org/problem?id=3268 每头牛都要去标号为X的农场参加一个party,农场总共有N个(标号为1-n),总共有M单向路联通,每头牛参加完party之后需要返回自己的 ...

  10. poj 3268 Silver Cow Party(最短路,正反两次,这个模版好)

    题目 Dijkstra,正反两次最短路,求两次和最大的. #define _CRT_SECURE_NO_WARNINGS //这是找出最短路加最短路中最长的来回程 //也就是正反两次最短路相加找最大的 ...

随机推荐

  1. 【Swift】UILabel的简单操作方法

    @IBAction func buttonClick_LabelCtrl(sender: AnyObject) { //定义CGRect来初始化UILable var frame: CGRect = ...

  2. 《设计模式》-原则三:依赖倒置原则(DIP)

    这几天晚上回来都去玩了!没有坚持学习.真的好惭愧! 非常自责 后面一定要坚持 一气呵成  争取每天学一点,把这个学完. 今天主要是看了一下  设计模式中的 原则三: 依赖倒置原则(DIP) 官方是这样 ...

  3. 【整理】HTML5游戏开发学习笔记(1)- 骰子游戏

    <HTML5游戏开发>,该书出版于2011年,似乎有些老,可对于我这样没有开发过游戏的人来说,却比较有吸引力,选择自己感兴趣的方向来学习html5,css3,相信会事半功倍.不过值得注意的 ...

  4. 20155310 2016-2017-2 《Java程序设计》第六周学习总结

    20155310 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 4.1 Y86指令集体系结构 •有8个程序寄存器:%eax.%ecx.%edx.%ebx.% ...

  5. CentOS Linux 7 安装教程

    建立新的虚拟机 将CentOS 7 ISO文件插入到CD-Rom 启动虚拟机,F12选择启动方式为CD/DVD 选择Install CentOS Linux 7 加载安装必要文件 选择安装过程所显示的 ...

  6. Go语言fmt库的print函数源码解析

    // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a B ...

  7. 零值比较--BOOL,int,float,指针变量与零值比较的if语句

    这是程序员面试的一道常见题,也是个C++基础问题.若只在大学里看过几本基础的编程入门书,看见这道题可能会觉得奇怪,不就是和0比较吗,直接拿出来比就是了,其实非也.下文引自google搜索结果,出处不详 ...

  8. mvn打war包以及解压包的方法

    有时候我们需要查看打成war包之后的目录,如果是maven项目我们可以直接用maven打包. 1.maven打包: 第一种: mvn package 如果不行先 mvn clean一下 第二种:(掌握 ...

  9. Spring---七大核心模块

    核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanFactory来产生和管理B ...

  10. python 爬虫简单的demo

    ''' @author :Eric-chen @contact:809512722@qq.com @time :2018/1/3 17:55 @desc :通过爬取http://movie.douba ...