Poj 3268 Silver cow party 迪杰斯特拉+反向矩阵
Silver cow party 迪杰斯特拉+反向
题意
有n个农场,编号1到n,每个农场都有一头牛。他们想要举行一个party,其他牛到要一个定好的农场中去。每个农场之间有路相连,但是这个路是单向的,并且去了还得回来,求花费时间最多是多少?
解题思路
很容易想明白需要分两步
- 第一步:算出目的点到其他点的最短距离, 这一步很好实现,直接使用Dijkstra即可
- 第二部:算出其他点到终点的最短距离。
关键就在第二部。迪杰斯特拉算的是某一点到其他所有点的最短距离,而这次我们是求的其他点到某一点的最短距离,正好反过来,这个该怎么求呢?反转矩阵。我们使用邻接矩阵的形式来存储图,在第一步已经求出来的情况下,把每条路反过来,就是把\(mp[i][j]\)和\(mp[j][i]\)的值互换,然后再求这个点到其他点的最短距离,所求的dis数组就是其他点到这一点的最短距离,想一想为什么,这个不太好说明白,咱们把问题简化一下,如果是双向图,那么使用Dijkstra求的是某一点到其他点的最短距离,那是不是也把其他点到这一点的最短距离也给求出来了,想到这,就比较好理解为什么要反转了吧。
代码实现
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1e3+7;
int e[maxn][maxn];
int vis[maxn];
int dis[maxn];
int dis2[maxn];//把第一次存储的最短距离放到这里
int n, m, x;
void init()
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
e[i][j]= i==j? 0:inf;
}
}
}
void dij(int s)
{
for(int i=1; i<=n; i++)
{
vis[i]=0;
dis[i]=e[s][i];
}
vis[s]=1;
for(int i=1; i<n; i++)
{
int tmp=inf, k;
for(int j=1; j<=n; j++)
{
if(!vis[j] && dis[j] < tmp)
{
tmp=dis[j];
k=j;
}
}
vis[k]=1;
for(int j=1; j<=n; j++)
{
if(!vis[j] && dis[j] > dis[k]+e[k][j])
{
dis[j]=dis[k]+e[k][j];
}
}
}
}
int main()
{
scanf("%d%d%d", &n, &m, &x);
{
int a, b, c;
init();
for(int i=1; i<=m; i++)
{
scanf("%d%d%d", &a, &b, &c);
if(e[a][b]>c)
e[a][b]=c;
}
dij(x);
for(int i=1; i<=n; i++)
dis2[i]=dis[i];//备份
for(int i=2; i<=n; i++)//反转矩阵
for(int j=1; j<i; j++)//注意j要小于i
{
int tmp=e[i][j];
e[i][j]=e[j][i];
e[j][i]=tmp;
}
dij(x);
int ans=0;
for(int i=1; i<=n; i++)
{
if(ans < dis2[i]+dis[i])//求来回之和最大的那个
{
ans=dis2[i]+dis[i];
}
}
printf("%d\n", ans);
}
return 0;
}
END
Poj 3268 Silver cow 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)
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13982 Accepted: 6307 ...
- 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
S ...
随机推荐
- 【前端】DOM操作
1 什么是DOM 全称 Document Object Model 文档对象模型. 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象.可以通 ...
- ubuntu16.04 下安装jdk
1. 在/usr/lib目录下新建jdk mkdir jdk 2. 执行文件移动 sudo mv ./resource/jdk-8u191-linux-x64.tar. ...
- Python---进阶---文件操作---按需求打印文件的内容
一. 编写一个程序,当用户输入文件名和行数的时候,将该文件的前N行内容打印到屏幕上 input 去接收一个文件名 input 去接收一个行数 ----------------------------- ...
- 一个错误导致懂了mac系统的PATH环境变量
一个完全不懂mac系统的强迫症小白,由于搭建环境都按照百度走,所以在执行命令echo $PATH查看PATH内容时发现怎么有这样一串东西 /usr/local/bin:/usr/bin:/bin:/u ...
- 【GDOI2014模拟】雨天的尾巴
题目 深绘里一直很讨厌雨天. 灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切. 虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连 根拔起,以及田地里 ...
- int转字符串 stringstream
1. 设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,将答案按 “偶-奇-总” 的位序,排出得到新数.重复进行,最后会得到 123. #include<i ...
- 20180827-Java网络编程
Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接 ...
- router-link传递参数并获取
跳转链接: <router-link :to="{path:'libraryDetail/', query:{library_id:data.library_id}}"> ...
- 国内npm镜像使用方法
npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...
- 北风设计模式课程---单一职责原则(Single Responsibility Principle)
北风设计模式课程---单一职责原则(Single Responsibility Principle) 一.总结 一句话总结: 一个类应该有且只有一个变化的原因:单一职责原则(SRP:Single Re ...