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 ...
随机推荐
- python 顺序执行任务
#!/usr/bin/python import os import time start_command="sh start-etl.sh " es_mac_confPath = ...
- Django继承drf的user模型的demo
1.安装虚拟环境 #mkvirtualenv drfdemo -p python3 #pip install django #pip install djangorestframework #pip ...
- 三 Spring和DI(面试)
IOC:控制反转,将对象的创建权反转给了Spring DI:依赖注入,前提要有IOC的环境.Spring管理这个类的时候会将类的依赖的属性,在xml注入(设置)进来. 面向对象的时候,类和类之间的 ...
- Pytorch本人疑问(2)model.train()和model.eval()的区别
我们在训练时如果使用了BN层和Dropout层,我们需要对model进行标识: model.train():在训练时使用BN层和Dropout层,对模型进行更改. model.eval():在评价时将 ...
- Jsp补充
留在这里日后出错可查 <%@ page language="java" import="java.util.*,java.lang.*" pageEnco ...
- 「luogu3810」陌上花开
「luogu3810」陌上花开 传送门 三维偏序, \(\text{CDQ}\) 分治板子题. 判重的地方注意一下,别的就都是板子了. 参考代码: #include <algorithm> ...
- MySQL 之基础操作及增删改查等
一:MySQL基础操作 使用方法: 方式一: 通过图型界面工具,如 Navicat,DBeaver等 方式二: 通过在命令行敲命令来操作 SQL ( Structure query language ...
- Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate
通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...
- Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)
文章目录 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建nacos-config-client模块 在 ...
- LeetCode206. Reverse Linked List(反转链表)
题目链接:https://leetcode.com/problems/reverse-linked-list/ 方法一:迭代反转 https://blog.csdn.net/qq_17550379/a ...