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. HDU - 2328 Corporate Identity(kmp+暴力)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2328 题意:多组输入,n==0结束.给出n个字符串,求最长公共子串,长度相等则求字典序最小. 题解:(居 ...

  2. 【noi 2.6_2988】计算字符串距离(DP)

    题意: 给两个字符串,可以增.删.改,问使这两个串变为相同的最小操作数. 解法:(下面2种的代码主要区别在初始化和,而状态转移方程大家可挑自己更容易理解的方法打) 1.f[i][j]表示a串前i个和b ...

  3. AtCoder Beginner Contest 188 C - ABC Tournament (模拟)

    题意:有\(2^n\)个人站成一排比赛,刚开始每个人都和自己右边的人进行比赛,赢得人晋级下一轮(下标的小的在前面),不断重复这个过程,问最后拿到第二名的人的编号. 题解:根据题意,可以用vector直 ...

  4. Codeforces #620 div2 B

    题目: Returning back to problem solving, Gildong is now studying about palindromes. He learned that a  ...

  5. Educational DP Contest G - Longest Path (dp,拓扑排序)

    题意:给你一张DAG,求图中的最长路径. 题解:用拓扑排序一个点一个点的拿掉,然后dp记录步数即可. 代码: int n,m; int a,b; vector<int> v[N]; int ...

  6. kubernetes生态--交付prometheus监控及grafana炫酷dashboard到k8s集群

    由于docker容器的特殊性,传统的zabbix无法对k8s集群内的docker状态进行监控,所以需要使用prometheus来进行监控: 什么是Prometheus? Prometheus是由Sou ...

  7. codeforces 1009D Relatively Prime Graph【欧拉函数】

    题目:戳这里 题意:要求构成有n个点,m条边的无向图,满足每条边上的两点互质. 解题思路: 显然1~n这n个点能构成边的条数,就是2~n欧拉函数之和(x的欧拉函数值代表小于x且与x互质的数的个数. 因 ...

  8. Linux 驱动框架---驱动中的时间相关

    内核中的时间 Linux 系统内核对于时间的管理依赖于硬件,硬件按一定的周期产生中断,周期由内核的一个配置值HZ决定在系统启动时会将定时器配置为HZ值指定的频率产生中断:同时内核和维护一个64位(X8 ...

  9. nodemon all in one

    nodemon all in one https://nodemon.io/ https://github.com/remy/nodemon#nodemon https://www.npmjs.com ...

  10. Jupyter All In One

    Jupyter All In One Jupyter Architecture https://jupyter.readthedocs.io/en/latest/projects/architectu ...