题目链接:点击查看

题目大意:给出n个点以及m条单项路径和一个点x,设从x点到i的距离及从i回到x点的距离分别为d1和d2,求d1+d2的最大值(1<=i<=n)

题目分析:看到这个题的第一反应是floyd,果不其然的TLE了,因为n是1000,n的三次方就到了1e9,不超时才怪....

然后想到spfa,从x点到i点的距离d1只要对x求一次最短路就行了,问题是从i点到x点的距离该怎么处理?总不至于求n次最短路

径然后挨个判断吧?这样肯定会超时。这里有一个很巧妙的方法,想出来就基本上没有问题了,就是利用邻接矩阵来存储边的信

息,等求出d1后,将这个矩阵转置一下,然后在求一次以x点为起点的最短路径,这样结果就是每个点到x点的最短路径了。

因为当矩阵转置之后,每条单向边的方向全部取反,所以这个时候对于x点求最短路径,和处理前对于每个点求最短路径的效果

是相同的,都求的是i点到x点的最短路径。

注意:这个题中我用ans数组储存了d1,然后在求一次spfa后的距离d就相当于d2

上代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<sstream>
#include<cmath>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e3+100;int n,m,x;int maze[N][N];int d[N];int ans[N];bool vis[N];void spfa(int x)
{memset(vis,false,sizeof(vis));memset(d,inf,sizeof(d)); vis[x]=true;d[x]=0;queue<int>q;q.push(x);while(!q.empty()){int tem=q.front();q.pop();vis[tem]=false;for(int i=1;i<=n;i++){if(d[i]>d[tem]+maze[tem][i]){d[i]=d[tem]+maze[tem][i];if(!vis[i]){vis[i]=true;q.push(i);}}}}
}int main()
{
//  freopen("input.txt","r",stdin);while(scanf("%d%d%d",&n,&m,&x)!=EOF){for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){maze[i][j]=i==j?0:inf;}for(int i=1;i<=m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);maze[a][b]=c;}spfa(x);for(int i=1;i<=n;i++)ans[i]=d[i];for(int i=1;i<=n;i++)for(int j=1;j<i;j++)swap(maze[i][j],maze[j][i]);spfa(x);int mmax=0;for(int i=1;i<=n;i++){if(ans[i]!=inf&&d[i]!=inf)mmax=max(mmax,ans[i]+d[i]);}cout<<mmax<<endl;}return 0;
} 

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 ---最短路径(图)

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23762   Accepted: 1085 ...

  3. POJ 3268 Silver Cow Party

    题目链接 题意 单向图,N - 1个牛去聚会,求所有牛去聚会和回家路径和的最大值 AC 很骚的操作 首先从派对的地方跑Dijkstra求出回家的最短路,然后将所有边翻转再次从聚会跑Dijkstra就是 ...

  4. POJ 3268 Silver Cow Party--正反Dijkstra

  5. 【POJ】3268 Silver Cow Party (将有向图的边反转)

    问题链接:http://poj.org/problem?id=3268 [问题描述] One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  6. 【POJ】3268 Silver Cow Party

    题目链接:http://poj.org/problem?id=3268 题意 :有N头奶牛,M条单向路.X奶牛开party,其他奶牛要去它那里.每头奶牛去完X那里还要返回.去回都是走的最短路.现在问这 ...

  7. POJ 3268 D-Silver Cow Party

    http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  8. Silver Cow Party (最短路)

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...

  9. Silver Cow Party (POJ - 3268 )

    Silver Cow Party (POJ - 3268 ) 这道题是我做的最短路专题里的一道题,但我还没做这个,结果比赛就出了,真是.......... 题目: One cow from each ...

最新文章

  1. 机器学习论文推荐 | 2019 Reddit最受喜欢的5篇AI论文
  2. VS 远程调试 Azure Web App
  3. Python学习笔记:Day14 完成Web App
  4. 【读书笔记】iOS-iCloud编程
  5. 【Qt】数据库SQL接口层
  6. person p = new person();_Python函数__new__及__init__作用及区别解析
  7. ElasticSearch D3
  8. 一起谈.NET技术,使用WCF实现SOA面向服务编程—— 架构设计
  9. jsf面试题_JSF面试问答
  10. shell 命令 cmd命令
  11. 写一个AndroidStudio有道翻译插件给大家
  12. BIOS设置图解教程 BIOS设置图解教程之AMI篇
  13. “今天星期五“-SAP SE09/STMS 请求号传输中遇到的错误及解决方案
  14. Sourcetree中使用cherry-pick
  15. Seurat 4.0 | 单细胞转录组数据整合(scRNA-seq integration)
  16. Microsoft Word2010 中设置和取消英文首字母大写
  17. 医院招聘护士 计算机证,医院招聘护士面试自我介绍
  18. Mysql数据库用户密码暴力破解
  19. 如何删除电脑上卸载软件的残留文件,清理软件残留?
  20. 怀念—伤心者,不痛不痒,冷暖自知

热门文章

  1. 读写锁的由奢入俭“易”
  2. ThreadLocal的重要方法介绍
  3. sqoop导入-hdfs
  4. redis常见应用场景
  5. 函数的参数-列表使用+=本质上是调用extend方法
  6. java builder.parse_JAVA之DocumentBuilder生成解析XML
  7. 我的世界服务器修改成创造,我的世界怎么创建领域
  8. python调用什么函数实现对文件内容的读取_Python 文件读取函数 read(), readline(), readlines()...
  9. mysql 查询的转义字符_mysql – 如何在LIKE查询中转义字符?
  10. 利用 Python / R 对数据集进行「长」「宽」转换