POJ-3268-最短路(dijkstra算法)
Silver Cow Party
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 12494 | Accepted: 5568 |
Description
One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤X ≤
N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; roadi requires
Ti (1 ≤ Ti ≤ 100) units of time to traverse.
Each cow must walk to the party and, when the party is over, return to her farm. Each cow is lazy and thus picks an optimal route with the shortest time. A cow's return route might be different from her original route to the party since roads are one-way.
Of all the cows, what is the longest amount of time a cow must spend walking to the party and back?
Input
M, and X
Lines 2..M+1: Line i+1 describes road i with three space-separated integers:Ai,
Bi, and Ti. The described road runs from farmAi to farm
Bi, requiring Ti time units to traverse.
Output
Sample Input
4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3
Sample Output
10
Hint
Source
field=source&key=USACO+2007+February+Silver">USACO 2007 February Silver
题目的意思是:从出发点到达目的地X。再从X返回到出发点的最短路径中的最大值(由于出发点没有固定,也就是能够:1->X->1, 2->X->2等)。
所以我们要枚举全部的可能性。找出当中的最大值。
巧妙地运用dijkstra算法,双向求出两次X->m的最短路径长然后相加即得到了m->X->m的最短路径。代码例如以下:
#include<queue>
#include<vector>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct Edge
{
int to;
int dis;
Edge(int to, int dis){
this -> to = to;
this -> dis = dis;
}
};
typedef pair<int,int>P; int a,b,c;
int N,M,X;
int d1[1005],d2[1005];
vector<Edge> G1[1005];
vector<Edge> G2[1005];
void dijkstra(int s,int d[],vector<Edge> G[])
{
priority_queue<P,vector<P>,greater<P> >q;
d[s]=0;
q.push(P(0,s));
while(q.size())
{
P p=q.top();
q.pop();
int v=p.second;
for(int i=0;i<G[v].size();i++)
{
Edge& e=G[v][i];
if(d[e.to]>d[v]+e.dis)
{
d[e.to]=d[v]+e.dis;
q.push(P(d[e.to],e.to));
}
}
}
}
int main()
{
memset(d1,0x5f,sizeof(d1));
memset(d2,0x5f,sizeof(d2));
scanf("%d%d%d",&N,&M,&X);
for(int i=1;i<=M;i++)
{
scanf("%d%d%d",&a,&b,&c);
G1[a].push_back(Edge(b,c));
G2[b].push_back(Edge(a,c));
}
dijkstra(X,d1,G1);
dijkstra(X,d2,G2);
int small_max=-1;
for(int i=1;i<=N;i++)
{
if(i==X) continue;
small_max=max(small_max,d1[i]+d2[i]);
}
cout<<small_max<<endl;
}
POJ-3268-最短路(dijkstra算法)的更多相关文章
- poj 3268 最短路dijkstra *
题目大意:给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x,除了牛x之外的牛,他们都有一个参加聚会并且回来的最 ...
- 单源最短路dijkstra算法&&优化史
一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...
- 最短路Dijkstra算法的一些扩展问题
最短路Dijkstra算法的一些扩展问题 很早以前写过关于A*求k短路的文章,那时候还不明白为什么还可以把所有点重复的放入堆中,只知道那样求出来的就是对的.知其然不知其所以然是件容易引发伤痛的 ...
- POJ 3268 Silver Cow Party 最短路—dijkstra算法的优化。
POJ 3268 Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbe ...
- 【POJ - 3268 】Silver Cow Party (最短路 Dijkstra算法)
Silver Cow Party Descriptions 给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x, ...
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- 单源最短路Dijkstra算法——matlab实现
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本思想 通过Dijk ...
- hdu2544 最短路 Dijkstra算法
最短路(Dijkstra算法模板题) Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 单源最短路(Dijkstra算法)
#返回上一级 @Author: 张海拔 @Update: 2015-03-11 @Link: http://www.cnblogs.com/zhanghaiba/p/3514570.html Dijk ...
- 单源最短路——dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...
随机推荐
- poj1240 Pre-Post-erous!
思路: 根据前序序列和后序序列递归构造m叉树,确定每个节点的子节点数量.再用组合数公式累乘. 实现: #include <iostream> using namespace std; ][ ...
- C# 客户端读取共享目录文件
控制台应用程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- PMBOK项目管理九大知识领域和五大流程 --美国IT项目管理硕士笔记(二)
PMBOK 项目管理 九大知识领域和五大流程 PMI Project Management Institute.PMI 是世界上最大的非盈利机构,是项目管理领域的领导者.PMI制定项目管理行业标准 ...
- delphi 字符串处理中的怪异现象与处理
1, 怪异现象:字符串相加操作不正常! 以上代码,明显输出字符串应含有后缀“.jpg”,但实际输出却不含后缀(如下),字符串加法操作似乎不起作用了! 采用showMessage进行输出,看看结果如何? ...
- 【Python-2.7】删除空格
有时我们在编程过程中,需要去除字符串两边的空格,可以用如下函数解决问题: rstrip():去除字符串右边的空格: lstrip():去除字符串左边的空格: strip():去除字符串两边的空格. 示 ...
- 4星|《DK商业百科》:主要商业思想与事件的概括
全书分为以下6章:1:企业的起步与发展:2:领导和人力资源:3:理财:4:战略和运营:5:营销管理:6:生产与生产后.每章有拆分为成多个比较小的专题,阐述相关专题的主要的商业思想与实践. 基本是作者按 ...
- python爬虫(房天下)
房天下 import requests res = requests.get('http://esf.sz.fang.com/') #res.text from bs4 import Beautifu ...
- acedssget
大多数ObjectARX函数在处理选择集和实体时,都用名字来识别选择集或实体,该名字用一个长整型对来表示的,并对AutoCAD来维护.在ObjectARX中,该名字的类型为ads_name.在对选择集 ...
- 18SVN进行版本控制
SVN进行版本控制 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. SVN Website.
- uva 272 Tex中的引号(Tex Quotes)
TeX is a typesetting language developed by Donald Knuth. It takes source text together with a few ty ...