POJ 3268:Silver Cow Party 求单点的来回最短路径
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 15989 | Accepted: 7303 |
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 irequires 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
求目标点到图中的其他点来回的最小值。
Dijkstra直接求来回的距离,然后比较求出最小值。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; const int MAX = 100005;
int edge[1005][1005];
int vist[1005],vist2[1005],minidis1[1005][1005],minidis2[1005][1005];
int N,M,X; void init()
{
int i,j; for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
if(j==i)
{
edge[i][j]=0;
minidis1[i][j]=0;
minidis2[i][j]=0;
}
else
{
edge[i][j]=-1;
minidis1[i][j]=MAX;
minidis2[i][j]=MAX;
}
}
}
for(i=1;i<=N;i++)
{
vist[i]=0;
vist2[i]=0;
}
} void dijkstra(int i)
{
int j,k;
int position=i;
int position2=i; vist[position]=1;
vist2[position]=1;
minidis1[i][position]=0;
minidis2[position][i]=0; for(j=1;j<=N-1;j++)//一共要添加进num-1个点
{
for(k=1;k<=N;k++)
{
if(vist[k]==0 && edge[position][k]!=-1 && minidis1[i][position]+edge[position][k] < minidis1[i][k])//新填入的点更新minidis
{
minidis1[i][k]=minidis1[i][position]+edge[position][k];
}
if(vist2[k]==0 && edge[k][position2]!=-1 && minidis2[position2][i]+edge[k][position2] < minidis2[k][i])//新填入的点更新minidis
{
minidis2[k][i]=minidis2[position2][i]+edge[k][position2];
}
}
int min_value=MAX,min_pos=0;
int min_value2=MAX,min_pos2=0;
for(k=1;k<=N;k++)
{
if(vist[k]==0 && minidis1[i][k]<min_value)//比较出最小的那一个作为新添入的店
{
min_value = minidis1[i][k];
min_pos = k;
}
if(vist2[k]==0 && minidis2[k][i]<min_value2)//比较出最小的那一个作为新添入的店
{
min_value2 = minidis2[k][i];
min_pos2 = k;
}
} vist[min_pos]=1;
position=min_pos; vist2[min_pos2]=1;
position2=min_pos2;
} } int main()
{
int i;
cin>>N>>M>>X;
init(); int temp1,temp2,temp3;
for(i=1;i<=M;i++)
{
cin>>temp1>>temp2>>temp3;
edge[temp1][temp2]=temp3;
}
memset(vist,0,sizeof(vist));
memset(vist2,0,sizeof(vist2)); dijkstra(X);
int ans=-1;
for(i=1;i<=N;i++)
{
if(i==X)continue;
ans=max(ans,minidis1[X][i]+minidis2[i][X]);
} cout<<ans<<endl;
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 3268:Silver Cow Party 求单点的来回最短路径的更多相关文章
- poj - 3268 Silver Cow Party (求给定两点之间的最短路)
http://poj.org/problem?id=3268 每头牛都要去标号为X的农场参加一个party,农场总共有N个(标号为1-n),总共有M单向路联通,每头牛参加完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 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/D Description One cow fr ...
随机推荐
- Session服务器之Memcached
材料:两台Tomcat(接Session复制一起做) 第一台Tomcat:IP为130 [root@localhost ~]# yum install libevent memcached -y ...
- 如何在PHP中防止SQL注入
使用PDO对象(对于任何数据库驱动都好用) addslashes用于单字节字符串的处理, 多字节字符用mysql_real_escape_string吧. 另外对于php手册中get_magic_qu ...
- vue父孙组件传值($attr及$listeners)的使用
父组件 <template> <div> <!-- 将值传给子组件 子组件可以获取自己想要的值 也可以忽视掉需要传给孙子组件的值 --> <!-- 同时获取通 ...
- CSS布局的三种机制
浮动元素之间没有缝隙,这和行内块还是不一样的,有点区别的! 2) 浮动元素与兄弟盒子之间的关系 注意:解决浮动的四种办法,后三种都是针对浮动元素的父元素的.
- redis 高级学习和应用场景
redis 高级学习 1.redis 复制 2.redis 集群 3.哨兵机制 4.spring 与哨兵结合 5.数据恢复与转移 6.redis 的阻塞分析 redis 实战 1. 数据缓存(热点数据 ...
- [经验] Java 使用 netty 框架, 向 Unity 客户端的 C# 实现通信 [1]
这是一个较为立体的思路吧 首先是技术选型: 前端 : HTML5 + jQuery ,简单暴力, 不解释 服务端 : Spring Boot + Netty + Redis/Cache 客户端 ...
- centos7一步一步搭建docker nginx 及重点讲解
系统环境:centos7.7 (VMware中) images版本:nginx:latest (截止2020.01.10最新版) 1.拉取镜像 docker pull nginx 2.启动nginx容 ...
- 设计模式课程 设计模式精讲 10-2 外观模式coding
1 代码演练 1.1 代码演练1(不使用外观模式) 1.2 代码演练2(使用外观模式) 2 应用核心 2.1 核心 2.2 零碎知识点 1 代码演练 1.1 代码演练1(不使用外观模式) 需求: 木木 ...
- Xcode Edit Schemes
关于本文:有关“Xcode Edit Schemes”的设置,还是有很大的学问的.由于时间关系,我一点一点的补充. 1.在开发的时候,至少将Run的Build Configuration设置为Debu ...
- Scrapy 常用的shell执行命令
1.在任意系统下,可以使用 pip 安装 Scrapy pip install scrapy/ 确认安装成功 >>> import scrapy >>> scrap ...