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 ...
随机推荐
- Java开发神器——MyEclipse CI 2019.4.0 全新发布(附下载)
MyEclipse线上特惠,在线立享专属折扣!火热开启中>> MyEclipse 2019的升级版本中,推出对Java 11的支持.性能改进及新的连接器等. [MyEclipse CI 2 ...
- unittest-mock-from-import
https://stackoverflow.com/questions/11351382/mock-patching-from-import-statement-in-python
- 【leetcode】1163. Last Substring in Lexicographical Order
题目如下: Given a string s, return the last substring of s in lexicographical order. Example 1: Input: & ...
- webstorm 点击右上角运行run 启动vue项目
点击右上角框 -> 编辑结构 点击加号 新增一个npm项目 前提:node环境已经安装完成,npm包管理器 1.进行定位到项目的路径2.安装依赖包,npm install3.启动服务,npm r ...
- js 将时间戳转为日期格式
最近项目需要在前端将一个13位的时间戳显示成日期格式,在网上查了很多都不符合要求,只有一个是能满足要求的,在这记录一下,说不定以后还用的着. 13位时间戳改为yyyy-MM-dd HH-mm-ss 格 ...
- 软件安装——彻底卸载MySQL
如果你的电脑里装过MySQL,想再重新安装MySQL的时候可能就会因为前一版本卸载不彻底而出现错误.最常见的就是安装好后设置参数的最后一步验证时,会在Execute configurattion步骤中 ...
- Java——static
[static] <1>static成员变量存储在内存data segment区域,不是存放在堆中. <2>静态成员变量属于整个类,任何一个对象都可以访问这个值:如果没有对象, ...
- [CF535D]Tavas and Malekas 题解
题意简述 有一个空着的长度为\(n\)的字符串\(ans\),再给出一个长度为\(m\)的序列\(a\),现要在序列中每个元素\(a_i\)的位置开始都规定必须为一个给定的字符串\(s\).问字符串\ ...
- jquery ajax实现文件上传
test5.html <html> <head> <meta http-equiv="Content-Type" content="text ...
- 微信小程序 button 组件
button 组件 拥有强大的功能 自身可以拥有很多跟微信风格的样式,且是 表单 和 开放的能力 重要的 按钮 button 的属性: size: 类型 字符串 按钮的大小 属性值:default 默 ...