本来在想 单源多点很好解决但是多源单点怎么解 然后我发现只要倒过来就可以了

把输入存下来然后 处理完dis1 重新init一次 倒着再输入一次 处理dis2 输出max(dis1[i] + dis2[i])

#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#include <map>
#include <vector>
#include <set>
#include <algorithm>
#define INF 0x3F3F3F3F
using namespace std; typedef pair<int, int> pii;
struct cmp{
bool operator ()(const pii a, const pii b){
return a.first > b.first;
}
}; int size, head[], point[], next[], val[]; void init()
{
size = ;
memset(head, -, sizeof head);
} void add(int from, int to, int value)
{
point[size] = to;
val[size] = value;
next[size] = head[from];
head[from] = size++;
} void dij(int dis[], int s)
{
priority_queue <pii, vector<pii>, cmp> q;
q.push(make_pair(, s));
dis[s] = ;
while(!q.empty()){
pii u = q.top();
q.pop();
if(dis[u.second] < u.first) continue;
for(int i = head[u.second]; ~i; i = next[i]){
int j = point[i];
if(dis[j] > val[i] + u.first){
dis[j] = val[i] + u.first;
q.push(make_pair(dis[j], j));
}
}
}
} int main()
{
int n, m, x;//parameter
int site1[], site2[], value[];//data
int dis1[], dis2[], ans;//result
//work out dis1
scanf("%d%d%d", &n, &m, &x);
memset(dis1, 0x3f, sizeof dis1);
memset(dis2, 0x3f, sizeof dis2);
init();
for(int i = ; i < m; i++){
scanf("%d%d%d", &site1[i], &site2[i], &value[i]);
add(site1[i], site2[i], value[i]);
}
dij(dis1, x);
//work out dis2
init();
for(int i = ; i < m; i++){
add(site2[i], site1[i], value[i]);
}
dij(dis2, x);
//output
ans = dis1[] + dis2[];
for(int i = ; i <= n; i++){
ans = max(ans, dis1[i] + dis2[i]);
//printf("dis1[%d] = %d dis2[%d] = %d\n", i, dis1[i], i, dis2[i]);
}
printf("%d\n", ans);
return ;
}

最新文章

  1. 关于js中的this
  2. 创建文本注记TextElement
  3. WPF依赖属性详解
  4. 115、定时器(TimerTask+Timer+Handler)
  5. 新颖的O2O商业模式,江水平和他的装修队
  6. 一个好用的hibernate泛型dao
  7. 8.2.1.15 ORDER BY Optimization ORDER BY 优化
  8. 扫雷游戏制作过程(C#描述):第三节、雷区绘制
  9. angularJs-route路由详解
  10. 分布式存储ceph——(5)ceph osd故障硬盘更换
  11. .Net 登陆的时候添加验证码
  12. confluence上传文件附件预览乱码问题(linux服务器安装字体操作)
  13. java:给你一个数组和两个索引,交换下标为这两个索引的数字
  14. [Done]SnowFlake生成Long类型主键返回前台过长导致精度缺失的问题
  15. Knockoutjs之observable和applyBindings的使用
  16. English trip M1 - PC9 Where am I Teacher:Jade
  17. php curl_init函数用法(http://blog.sina.com.cn/s/blog_640738130100tsig.html)
  18. 2016.6.18——Implement strStr()
  19. iOS: 让键盘消失的的4种方法
  20. CSS/LESS tips and snippets

热门文章

  1. SrcollView分页加载数据(第二种方法 自定义listView)
  2. 常错-UIScrollView中得图片不能被拖动
  3. 防止忘记初始化NSMutableArray的方法
  4. SimpleDateFormat()简单了解
  5. 提示错误#165 too few argument in function call
  6. hdu 2029
  7. Java中的blank final
  8. 实现:编辑短信,按power键锁屏后,再点亮屏幕,进入的还是编辑短信界面,按返回键才会进入解锁界面。
  9. jQuery基础学习笔记(1)
  10. if语句解一元二次方程~