题目连接:http://poj.org/problem?id=3268

题意:给出n个点和m条单向边,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x,除了牛x之外的牛,他们都有一个参加聚会并且回来的最短时间,从这些最短时间里找出一个最大值输出。

分析:先跑一遍dij求出x到其他点的最短距离,再反向建图,求出各点到达x的最短距离,然后枚举一下即可。

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-9
#define N 1010
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
struct node
{int u,v,w;node(){}node(int v,int w):v(v),w(w){}bool operator<(const node &a)const{return w>a.w;}
}e[N*100];
int dp1[N],dp2[N],vis[N],n,m,x;
vector<node>g[N];
void dij(int dp[])
{priority_queue<node>que;while(!que.empty())que.pop();for(int i=1;i<=n;i++)dp[i]=inf;FILL(vis,0);node cur,nxt;cur.v=x;cur.w=0;dp[x]=0;que.push(cur);while(!que.empty()){cur=que.top();que.pop();int u=cur.v;if(vis[u])continue;vis[u]=1;for(int i=0,sz=g[u].size();i<sz;i++){nxt=g[u][i];int v=nxt.v,w=nxt.w;if(dp[u]+w<dp[v]){dp[v]=dp[u]+w;que.push(node(v,dp[v]));}}}
}
int main()
{while(scanf("%d%d%d",&n,&m,&x)>0){for(int i=1;i<=n;i++)g[i].clear();for(int i=1;i<=m;i++){scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);g[e[i].u].push_back(node(e[i].v,e[i].w));}dij(dp1);for(int i=1;i<=n;i++)g[i].clear();for(int i=1;i<=m;i++){g[e[i].v].push_back(node(e[i].u,e[i].w));}dij(dp2);int ans=0;for(int i=1;i<=n;i++)ans=max(ans,dp1[i]+dp2[i]);printf("%d\n",ans);}
}

View Code

转载于:https://www.cnblogs.com/lienus/p/4273251.html

poj3268(最短路)相关推荐

  1. POJ 3268 迪杰斯特拉图论 置换找最短路

    题目:https://vjudge.net/problem/POJ-3268 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numb ...

  2. [C] [最短路] 只有5行的算法:Floyd-Warshall

    终于学到求最短路了,终于来到我最喜欢的算法--Floyd-Warshall了!今天还有点小激动呢! 我喜欢它,当然是因为它逻辑十分简单咯!真的只有5行诶! Floyd-Warshall算法 题目描述 ...

  3. BZOJ4152 AMPPZ2014 The Captain(最短路)

    事实上每次走到横坐标或纵坐标最接近的点一定可以取得最优方案.于是这样连边跑最短路就可以了. #include<iostream> #include<cstdio> #inclu ...

  4. Codeforces.1051F.The Shortest Statement(最短路Dijkstra)

    题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚 ...

  5. BZOJ1491: [NOI2007]社交网络(Floyd 最短路计数)

    Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 2343  Solved: 1266 [Submit][Status][Discuss] Descrip ...

  6. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  7. E:By Elevator or Stairs? CF595 DP最短路

    题目链接 比赛的时候一看,这不是最短路吗,然后敲了一个最短路. 然后比赛完发现大家基本都写的dp,我真是个憨憨,dp3行 最短路就建个简单的图,dp就是从上一维转化过来就是了 优秀的dp: //#pr ...

  8. The Shortest Statement CodeForces - 1051F LCA+最短路

    太弱了... 一开始看到题感觉是跑一个最小生成树在上边进行LCA就行了,但是发现过不了样例,然后就是就想到了之前做过类似做法的题目,就是非生成树上的边最多只有21条,然后就那些边记录下来,通过每一条边 ...

  9. JZOJ #4722 跳楼机 (最短路模型的完美转化)

    题目描述: 给出$h,x,y,z$,求在$h$以内,$x,y,z$可以凑出多少个不同的数.$(1\leq{h}\leq{10^{18}},1\leq{x,y,z}\leq{10^5})$ 解题思路: ...

最新文章

  1. 禁用页面缓存的几种方法(静态和动态)
  2. 自动驾驶多模态传感器融合的综述
  3. jax-ws服务使用
  4. 诺基亚发布首款高功率小基站SCORE以及Flexi Zone LWA支持能力
  5. 城市规划理论II 通勤与移居
  6. 菜鸟学自动化测试(四)----selenium 命令之验证页面元素
  7. oracle连接数达不到上限,Oracle超出最大连接数问题及解决(转)
  8. 离婚前一晚是什么心情呢?
  9. ASP.NET 将Excel导入数据库
  10. POJ-3660.Cow Contest(有向图的传递闭包)
  11. matlab中如何画柱状图,matlab如何画柱状图?matlab绘制柱状图教程
  12. mac下玩英雄联盟LoL国服的新办法
  13. 计算机网络的结构有,计算机网络的组成部分是什么,其各自都有什么功能
  14. Python 解压压缩包至文件夹、把整个文件夹打包至压缩包
  15. 树梅派应用25:宅男必备:配备电子纸屏幕的抽纸盒
  16. Android Protobuf应用及原理
  17. Android webview Input type=file 文件上传 解决方法
  18. 如何在Oracle官网下载jdk
  19. 我们无法创建新的分区,也找不到现有的分区。有关详细信息,请参阅安装日志文件的解决方法
  20. (LeetCode C++)跳跃游戏

热门文章

  1. Appium自动化测试-iOS真机运行
  2. python3运行报错:TypeError: Object of type 'type' is not JSON serializable解决方法
  3. run loop 测试
  4. wringPi 初始化GPIO 为上拉_你彻底弄清GPIO内部结构和各种模式了吗?
  5. Unity制作游戏中的场景
  6. mysql去除输入的字符串中的中文_Sql得到(去除)字符串中所有汉字,字母,数字的函数...
  7. 同步、异步 与 串行、并行的区别
  8. 汇编SF、CF、 OF 、ZF、 PF
  9. mysql 前后代表什么_MySQL的锁
  10. 脑机接口新进展!意念控制机器人离实现更近了一步!