Silver Cow Party

POJ-3268

  • 这题也是最短路的模板题,只不过需要进行两次求解最短路,因为涉及到来回的最短路之和。
  • 该题的求解关键是:求解B-A的最短路时,可以看做A是起点,这就和求解A-B的最短路很类似了,只不过需要将单向路的距离调换一下即可。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int INF = 1111111111;
int w[1001][1001];//d[i][j]表示i到j的距离
int d[1001];//d[i]表示s到i的最短近距离
int v[1001];//v[i]表示是否被访问过
int n;//表示顶点数
void dijkstra(int s) {
for (int i = 0; i<n; i++) {
if (i == s)
d[i] = 0;
else
d[i] = INF;
}
memset(v, 0, sizeof(v));
for (int i = 0; i<n; i++) {
int x, m = INF;
for (int y = 0; y<n; y++)
if (!v[y] && d[y] <= m)
m = d[x = y];
v[x] = 1;
for (int y = 0; y<n; y++)
d[y] = min(d[y], d[x] + w[x][y]);
} }
int main() {
int m, x;
cin >> n >> m >> x;
int a, b;
int weight;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
w[i][j] = INF;
if (i == j)
w[i][j] = 0;
}
}
for (int i = 0; i < m; i++) {
cin >> a >> b>>weight;
w[a-1][b-1] = weight;
}
dijkstra(x - 1);
int to[1001];
int back[1001];
for (int i = 0; i < n; i++)
back[i] = d[i];
/*for (int i = 0; i < n; i++) {
dijkstra(i);
to[i] = d[x - 1];
}*/
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int temp = w[i][j];
w[i][j] = w[j][i];
w[j][i] = temp;
}
}
dijkstra(x - 1);
int max=0, max_i=0; for (int i = 0; i < n; i++) {
if (max < d[i] + back[i]) {
max = d[i] + back[i];
max_i = i;
}
}
cout << max << endl;
return 0;
}

JAVA:

package POJ;
import java.util.*;
public class POJ_3268 {
static int n,m,x;//n:1000,m:100000
static final int INF = 1111111111;
static int [][]w;//d[i][j]表示i到j的距离
static int []d;//d[i]表示s到i的最短近距离
static int []v;//v[i]表示是否被访问过
static void dijkstra(int s) {
for (int i = 0; i<n; i++) {
if (i == s)
d[i] = 0;
else
d[i] = INF;
}
Arrays.fill(v, 0);//这里很重要,因为v曾经改变过
for (int i = 0; i<n; i++) {
int x=0, m = INF;
for (int y = 0; y<n; y++)
if (v[y]==0 && d[y] <= m)
m = d[x = y];
v[x] = 1;
for (int y = 0; y<n; y++)
d[y] = Math.min(d[y], d[x] + w[x][y]);
} }
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
n=cin.nextInt();m=cin.nextInt();x=cin.nextInt();
w=new int[n][n];
d=new int[n];
v=new int[n];
int a, b;
int weight;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
w[i][j] = INF;
if (i == j)
w[i][j] = 0;
}
}
for (int i = 0; i < m; i++) {
a=cin.nextInt();b=cin.nextInt();weight=cin.nextInt();
w[a-1][b-1] = weight;
}
dijkstra(x - 1);
int []to=new int[n];
int []back=new int[n];
for (int i = 0; i < n; i++)
back[i] = d[i];
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int temp = w[i][j];
w[i][j] = w[j][i];
w[j][i] = temp;
}
}
dijkstra(x - 1);
int max=0, max_i=0; for (int i = 0; i < n; i++) {
if (max < d[i] + back[i]) {
max = d[i] + back[i];
max_i = i;
}
}
System.out.println(max);
} }

POJ-3268(来回最短路+dijkstra算法)的更多相关文章

  1. 单源最短路dijkstra算法&&优化史

    一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...

  2. 最短路Dijkstra算法的一些扩展问题

    最短路Dijkstra算法的一些扩展问题     很早以前写过关于A*求k短路的文章,那时候还不明白为什么还可以把所有点重复的放入堆中,只知道那样求出来的就是对的.知其然不知其所以然是件容易引发伤痛的 ...

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

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

  4. 【POJ - 3268 】Silver Cow Party (最短路 Dijkstra算法)

    Silver Cow Party Descriptions 给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x, ...

  5. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  6. 单源最短路Dijkstra算法——matlab实现

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本思想 通过Dijk ...

  7. hdu2544 最短路 Dijkstra算法

    最短路(Dijkstra算法模板题) Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. 单源最短路(Dijkstra算法)

    #返回上一级 @Author: 张海拔 @Update: 2015-03-11 @Link: http://www.cnblogs.com/zhanghaiba/p/3514570.html Dijk ...

  9. 单源最短路——dijkstra算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...

随机推荐

  1. hdu3506 Monkey Party

    Problem Description Far away from our world, there is a banana forest. And many lovely monkeys live ...

  2. Codeforces Round #494 (Div. 3) D. Coins and Queries (贪心,数学)

    题意:给你一组全是\(2^d\ (d\ge0)\)的数,询问q次,每次询问一个数,问这个数是否能够由原数组中的数相加得到,如果能,输出最少用多少个数,否则输出\(-1\). 题解:首先贪心得出结论:如 ...

  3. .Net反编译实践记录

    去壳 去壳可以使用 de4dot,源码在 这里.可用版本 下载地址. 使用方式为:.\de4dot.exe [path] 修改代码 反编译修改代码可以使用 dnSpy,源码在 这里.可用版本 下载地址 ...

  4. Leetcode(886)-可能的二分法

    给定一组 N 人(编号为 1, 2, ..., N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢其他人,那么他们不应该属于同一组. 形式上,如果 dislikes[i] = [a, b] ...

  5. 图解算法——链表中倒数第k个节点

    题目来源: 剑指 Offer 22. 链表中倒数第k个节点 leetCode 题目描述: 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个 ...

  6. codeforce 855B

    B. Marvolo Gaunt's Ring time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  7. mybatis(二)全局配置mybatis-config.xml

    转载:https://www.cnblogs.com/wuzhenzhao/p/11092526.html 大部分时候,我们都是在Spring 里面去集成MyBatis.因为Spring 对MyBat ...

  8. MQTT 协议 部分细节

    这里不纪录协议文档中大部分通用内容主要记录一下自己比较困惑的细节处理机制.主要有如下几个点: 连接时的具体细节行为? client 在连接到broker时同时指定自己的keepaliveTime和 w ...

  9. Linux 驱动框架---linux 驱动

    总述 Linux 系统下的驱动最后都是以如下这个结构体呈现在系统中的,注意其中的dev_pm_ops是内核新增的内容来准备替换platform_driver中的电源管理相关的内容.这里内容是先进行总体 ...

  10. windows10 浏览器跑分对比!

    2015-12-12 windows10 浏览器跑分对比! YOUR BROWSER SCORES!                MaxScore=555http://html5test.com/i ...