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 迪杰斯特拉+反向矩阵的更多相关文章

  1. POJ 3268 Silver Cow Party (最短路径)

    POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...

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

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

  3. POJ 3268 Silver Cow Party (Dijkstra)

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13982   Accepted: 6307 ...

  4. POJ 3268 Silver Cow Party (双向dijkstra)

    题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

  5. POJ 3268 Silver Cow Party 最短路

    原题链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

  6. POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】

    Silver Cow Party Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Su ...

  7. 图论 ---- spfa + 链式向前星 ---- poj 3268 : Silver Cow Party

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12674   Accepted: 5651 ...

  8. DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards

    题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...

  9. poj 3268 Silver Cow Party

                                                                                                       S ...

随机推荐

  1. this 指向图

  2. Selenium Java tutorial

     https://eyes.applitools.com/app/test-results 1.

  3. 基于VUE多人聊天项目

    项目背景 公司平台要做一个通讯系统,本来是java 来做的后面改前端+PHP来做,所以就用VUE来做这个了. github github地址 新人求star 技术栈 vue-axios vuex we ...

  4. 前端之JQuery:JQuery基本语法

    jQuery基本语法 一.jQuery基础1.为什么要用jquery? 写起来简单,省事,开发效率高,兼容性好2.什么是jQuery? jQuery是一个兼容多浏览器的JavaScript库(类似py ...

  5. 3分钟教会你把封装的js公共方法挂载在vue实例原型上

    第一步:首先在src文件夹里面创建一个通用js文件夹,然后在创建的文件夹里面创建一个js文件 第二步:const 一个方法,然后通过export暴露出来(在同一个页面可以写多个方法,和暴露多个方法,在 ...

  6. 奇偶选择器:使用odd和even属性实现表格单双行颜色相间和不同

    一.奇偶选择器 表格在呈现数据的时候我们为了方便观看,而隔行显示不同的颜色,虽然可以用用类选择器 class实现这种效果,但是未免太过麻烦,为了更加简便地表现这种特殊的效果我们需要用到一种特殊的选择器 ...

  7. mysql DELETE语句 语法

    mysql DELETE语句 语法 作用:用于删除表中的行.广东大理石构件 语法:DELETE FROM 表名称 WHERE 列名称 = 值 mysql DELETE语句 示例 //删除person表 ...

  8. TCP UDP 包的最大字节

    UDP 1500,常见会设置为1024 如: ]; TCP 60*1024 UDP如果设置为1024,但是实际发送超出1024,会直接接不到应答,所以,如果你的其他命令都能正常接收,而这个命令莫名其妙 ...

  9. ES的聚合操作

    构建数据: ​    @Test    public void createIndex(){        /**         * 创建索引         * */        client. ...

  10. uniapp 之navigateTo:fail page 跳转路径不对

    开发uniapp,点击列表跳转详情报错 [system] navigateTo:fail page `/pages/tabBar/index/detail/detail?title=uni-app行业 ...