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. poj1821 Fence(dp,单调队列优化)

    题意: 由k(1 <= K <= 100)个工人组成的团队应油漆围墙,其中包含N(1 <= N <= 16 000)个从左到右从1到N编号的木板.每个工人i(1 <= i ...

  2. Codeforces Beta Round #19 D. Points

    Description Pete and Bob invented a new interesting game. Bob takes a sheet of paper and locates a C ...

  3. ASP.NET 部署IIS后如何访问共享目录文件

    1.我的电脑-->管理-->系统工具-->本地用户和组-->用户-->右键新建用户-->创建一个与远程文件夹相同的账号密码! 如下图: 以上为部署接口服务器中的用户 ...

  4. 在 Spring Boot 2 中致敬 JSP

    新冠病毒

  5. MySQL 主从复制(下)

    延时复制 因为延时复制主从数据同一时间不一致, 所以延时从库一般只能做备份,不提供任何对外服务 配置延时复制(已经有主从) 1.停止主从 mysql> stop slave; Query OK, ...

  6. servlet相关知识点

    一.servlet的生命周期 Servlet(Sever Applet),全称是Java Servlet,是用java编写的服务器程序.Servlet是指任何实现了这个Servlet接口的类. ser ...

  7. 牛客网多校第4场 J Hash Function 【思维+并查集建边】

    题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...

  8. Ubuntu 18.04 + pip3 install virtualenvwrapper 报错 ERROR: virtualenvwrapper could not find virtualenv in your path

    接上片... 问题 virtualenvwrapper装好后, 发现使用mkvirtualenv XX时, 又找不到virtualenv了... apt install python3-virtual ...

  9. CURL (CommandLine Uniform Resource Locator) 简易教程!

    1 http://curl.haxx.se/ http://curl.haxx.se/docs/httpscripting.html curl is an open source command li ...

  10. 设计模式六大原则 All In one

    设计模式六大原则 All In one 开闭原则: 对扩展开放,对修改关闭; 设计模式的六大原则: 0.总原则-开闭原则 对扩展开放, 对修改封闭; 在程序需要进行拓展的时候, 不能去修改原有的代码, ...