poj 3268 Silver Cow Party
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 19325 | Accepted: 8825 |
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; road i 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
Lines 2..M+1: Line i+1 describes road i with three space-separated integers: Ai, Bi, and Ti. The described road runs from farm Ai 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
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<functional>
using namespace std;
typedef pair<int, int> P;
const int V_MAX = + ;
struct edge {
int to, time;
};
int V;
vector<edge>G[V_MAX];
int d[V_MAX];
int x[V_MAX];
void dijkstra(int s) {
priority_queue<P, vector<P>, greater<P>>que;
fill(d,d+V,INT_MAX);
d[s] = ;
que.push(P(,s));
while (!que.empty()) {
P p = que.top();que.pop();
int v = p.second;
if (d[v] < p.first)continue;
for (unsigned int i = ;i < G[v].size();i++) {
edge e = G[v][i];
if (d[e.to] > d[v] + e.time) {
d[e.to] = d[v] + e.time;
que.push(P(d[e.to],e.to));
}
}
}
} int main() {
int N, M,X;
scanf("%d%d%d", &N, &M, &X);
X--;
V = N;
for (int i = ;i < M;i++) {
edge E;
int from;
scanf("%d%d%d",&from,&E.to,&E.time);
from--;E.to--;
G[from].push_back(E);
}
dijkstra(X);
memset(x,,sizeof(x));
for (int i = ;i < V;i++) {
x[i] += d[i];
}
for (int i = ;i < V;i++) {
dijkstra(i);//以i点为中心,
x[i] += d[X];//计算i到目的地的最短距离并累加
}
int result = *max_element(x,x+V);
printf("%d",result);
return ;
}
这样用dijkstra算法搜索次数过多,耗时过多,看了hankcs博主的文章,很有启发,思路:分别以目的地为起点和终点,使用两次dijkstra算法即可,这样一来存路径时需要用两个数组,一个存正向路径,一个存反向路径,正向路径用于计算以目的地为起点时走到各点的最短路径,反向路径用于计算以目的地为终点时各点走到目的地的最短路径。
AC代码:
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<functional>
#include<string.h>
using namespace std;
typedef pair<int, int> P;
const int V_MAX = + ;
struct edge {
int to, time;
edge() {};
edge(int a,int b):to(a),time(b){}
};
int V;
vector<vector<edge>>G(V_MAX);//预定义容量,以防止越界
vector<vector<edge>>RG(V_MAX);
//vector<edge>G[V_MAX];
//vector<edge>RG[V_MAX];
int d[V_MAX];
int rd[V_MAX];
void dijkstra(int s) {
priority_queue<P, vector<P>, greater<P>>que;
fill(d,d+V,INT_MAX);
d[s] = ;
que.push(P(,s));
while (!que.empty()) {
P p = que.top();que.pop();
int v = p.second;
if (d[v] < p.first)continue;
for (unsigned int i = ;i < G[v].size();i++) {
edge e = G[v][i];
if (d[e.to] > d[v] + e.time) {
d[e.to] = d[v] + e.time;
que.push(P(d[e.to],e.to));
}
}
}
} int main() {
int N, M,X;
scanf("%d%d%d", &N, &M, &X);
X--;
V = N;
for (int i = ;i < M;i++) {
edge E;
int from,to,time;
scanf("%d%d%d",&from ,&to,&time);
from--;to--;
G[from].push_back(edge(to,time));
RG[to].push_back(edge(from,time));//存反向图
}
dijkstra(X);
//G = RG;
G.swap(RG);
memcpy(rd,d,sizeof(d));
dijkstra(X);
for (int i = ;i < V;i++) {
d[i] += rd[i];
}
int result = *max_element(d,d+V);
printf("%d",result);
return ;
}
poj 3268 Silver Cow Party的更多相关文章
- POJ 3268 Silver Cow Party (最短路径)
POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...
- 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)
题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...
- POJ 3268 Silver Cow Party 最短路
原题链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...
- POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】
Silver Cow Party Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Su ...
- 图论 ---- spfa + 链式向前星 ---- poj 3268 : Silver Cow Party
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12674 Accepted: 5651 ...
- DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards
题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...
- POJ 3268 Silver Cow Party (Dijkstra)
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13982 Accepted: 6307 ...
- POJ 3268 Silver Cow Party (最短路dijkstra)
Silver Cow Party 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/D Description One cow fr ...
随机推荐
- 分享8款绚丽的HTML5/jQuery特效插件
有几天没有分享前端资源了,今天要向大家分享15款非常给力的HTML5/jQuery特效插件,废话少说,一起来看看. 1.CSS3图片重力感应特效 很酷的一款CSS3模拟重力感应特效,你可以拖动图片来甩 ...
- js 处理url中文参数 java端接收处理
正常情况下当http请求中带有中文参数时,浏览器会自动对中文进行一次编码(按照当前页面的pageEncoding),java端容器会对接收到的参数自动进行一次转码,则request.getParame ...
- 基于Raft构建弹性伸缩的存储系统的一些实践
基于Raft构建弹性伸缩的存储系统的一些实践 原创 2016-07-18 黄东旭 聊聊架构 最近几年来,越来越多的文章介绍了 Raft 或者 Paxos 这样的分布式一致性算法,但主要集中在算法细节和 ...
- c#使用MethodInvoker解决跨线程访问控件
功能函数测试集锦(77) C#专区(114) 版权声明:本文为博主原创文章,未经博主允许不得转载. .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线 ...
- android图片特效处理之模糊效果
这篇将讲到图片特效处理的模糊效果.跟前面一样是对像素点进行处理,算法是通用的,但耗时会更长,至于为什么,看了下面的代码你就会明白. 算法: 一.简单算法:将像素点周围八个点包括自身一共九个点的RGB值 ...
- iOS企业应用Profile制作流程
第一步:企业版iDP申请完成以后,访问iOS Dev Center:https://developer.apple.com/devcenter/ios/index.action 第二步:点击Log I ...
- c#获得目标服务器中所有数据库名、表名、列名的实现代码
/// <summary> /// 获得目标服务器所有数据库名 /// </summary> /// <param name="serverName" ...
- Python练习题 026:求100以内的素数
[Python练习题 026] 求100以内的素数. ------------------------------------------------- 奇怪,求解素数的题,之前不是做过了吗?难道是想 ...
- 测试你是否和LTC水平一样高
Problem Description 大家提到LTC都佩服的不行,不过,如果竞赛只有这一个题目,我敢保证你和他绝对在一个水平线上!你的任务是:计算方程x^2+y^2+z^2= num的一个正整数解. ...
- Linux常用命令速查备忘
Linux常用命令速查备忘 PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...