Party

jzoj 1328

题目大意

有一个有向图,给你一个x,让你求每一个点到x再回去的最短路径,输出所有最短路径的最大值

输入样例

4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3

输出样例

10

样例解释

数据范围

1⩽x⩽N⩽10001\leqslant x\leqslant N\leqslant 10001⩽x⩽N⩽1000
1⩽m⩽1000001\leqslant m\leqslant 1000001⩽m⩽100000
1⩽ti⩽1001\leqslant t_i\leqslant 1001⩽ti​⩽100

解题思路

每一条边建一条正边一条反边,从x跑两遍spfa,然后合在一起即可

代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n, m, s, x, y, z, w, h, ans, tot, p[1500], b[1500], bb[1500], head[1500], headd[1500];
struct rec
{int to, l, next;
}a[100500], e[100500];
void add(int x, int y, int z)
{a[++tot].to = y;a[tot].l = z;a[tot].next = head[x];head[x] = tot;e[++w].to = x;//反边e[w].l = z;e[w].next = headd[y];headd[y] = w;
}
void spfa()
{memset(b, 127/3, sizeof(b));queue<int>d;d.push(s);p[s] = 1;b[s] = 0;while(!d.empty())//最短路{h = d.front();d.pop();for (int i = head[h]; i; i = a[i].next)if (b[h] + a[i].l < b[a[i].to]){b[a[i].to] = b[h] + a[i].l;if (!p[a[i].to]){p[a[i].to] = 1;d.push(a[i].to); }} p[h] = 0;} memset(bb, 127/3, sizeof(bb));d.push(s);p[s] = 1;bb[s] = 0;while(!d.empty())//反的最短路{h = d.front();d.pop();for (int i = headd[h]; i; i = e[i].next)if (bb[h] + e[i].l < bb[e[i].to]){bb[e[i].to] = bb[h] + e[i].l;if (!p[e[i].to]){p[e[i].to] = 1;d.push(e[i].to); }} p[h] = 0;} return;
}
int main()
{scanf("%d %d %d", &n, &m, &s);for (int i = 1; i <= m; ++i){scanf("%d %d %d", &x, &y, &z);add(x, y, z);} spfa();for (int i = 1; i <= n; ++i)ans = max(ans, b[i] + bb[i]);//合在一起printf("%d", ans);return 0;
}

【SPFA】Party(jzoj 1328)相关推荐

  1. 【归并排序】休息(jzoj 3462)

    休息 jzoj 3462 题目大意 给你一个序列,你每一回合把它划分成尽可能少的单调递减的序列(第一次划分到的序列长度都是偶数),然后把每个序列翻转,问你把它变成单调递增的序列要翻转多少次 输入样例 ...

  2. 【数学】数列(jzoj 2752)

    数列 jzoj 2752 题目大意: 给你一个正整数n(有多组数据),让你把它分为一个连续的正整数列之和(长度大于1),然你求着个数列最短的长度,如果这个序列不存在,那输出-1 输入样例 9 2 输出 ...

  3. 【结论】棋盘(jzoj 2297)

    棋盘 jzoj 2297 题目大意: 在棋盘上有一个特殊的象,他可以向四个方向行走若干步(左上,左下,右上,右下),现在问从某一个点是否能到另外一个点 输入样例 5 1 1 2 2 2 3 2 2 1 ...

  4. 【数学】礼物(jzoj 2129)

    礼物 jzoj 2129 题目大意 有1--n,n个礼物盒,第i个礼物盒有i个礼物,现在让你选2个礼物盒,使他是k的倍数 输入样例 1 1 3 2 5 2 50 50 0 0 输出样例 0 1 4 2 ...

  5. 【DP】楼梯(jzoj 1520)

    楼梯 jzoj 1520 题目大意: 有n个楼梯,跳跃高度初始值是1,当往后一层时,跳跃高度就×2,当跳跃只能跳跃到当前能跳到楼梯,且跳跃之后,跳跃高度变回1,问跳到第n层最少花几步 样例输入 5 0 ...

  6. 【对数】YY(jzoj 1438)

    YY 题目大意: 给出一个超大正整数S,求出nn{n}^{n}nn=S中n的解 样例输入 387420489 样例输出 9 数据范围限制 S的位数小于500000 解题思路: 看到数据,爆搜是不可能的 ...

  7. 【dfs】病毒(jzoj 1284)

    病毒 题目大意: 有n(1<=n<=1000)头奶牛,d(1<=d<=15)种病毒,每头奶牛身上有可能有很多种病毒病毒,每头奶牛挤出的牛奶是混在一起放的,问最多可以挤多少头奶牛 ...

  8. 【模拟】蚂蚁(jzoj 1508)

    蚂蚁 题目大意: 有n只蚂蚁,他们各往一个方向走(上北,下南,左西和有东四个方向),他们如果撞到一起就会直接消失,每个单位时间走一格,但有一种情况:两只蚂蚁相距一格,两只蚂蚁相向而行,就会在0.5秒后 ...

  9. 【单调队列】【DP】城市交通(jzoj 1749)

    城市交通 jzoj 1749 题目大意 有n个点,x到y的前提是x<y,代价是(y−x)∗ax+by(y-x)*a_x+b_y(y−x)∗ax​+by​,问从1到n的最小代价是多少 输入样例 4 ...

最新文章

  1. 如何用 Slack 和 Kubernetes 构建一个聊天机器人?| 附代码
  2. Meson:支持Netflix的机器学习工作流
  3. word2013 blog test
  4. pexpect oracle,expect免交互脚本编程
  5. matlab均线程序化交易,【策略分享】Matlab量化交易策略源码分享
  6. 201103阶段二linux gdb调试与ftp配置
  7. 读取带空格字符串小结
  8. ad如何设置pcb板子形状_手把手教你在PCB上添加泪滴
  9. Java里面as_与Java中的C#关键字“ as”等效
  10. 基于swing的java系统_Java实验--基于Swing的简单的歌曲信息管理系统(一)
  11. Python安装第三方包(setup.py)
  12. 机器学习之监督学习(五)——集成学习(Boosting)
  13. 计算机体系结构的分类
  14. 11.并发编程--同步类容器和并发类容器
  15. 学习数据结构与算法分析如何帮助您成为更优秀的开发人员
  16. python if else break_Python条件判断 if-else for循环 while循环 break continue
  17. 多元函数法曲率和主曲率的几何解释
  18. matlab有限域多项式除法_第四章多项式和有限域.ppt
  19. python分组统计excel数据_在python中对数据进行分组并与excel进行比较
  20. 使用React.js和appbase.io构建类似Twitter的Search Feed

热门文章

  1. dataset的去重计数 g2_ExcelExcel去重、计数一步到位,这个方法简单到哭
  2. 算法设计与分析——回溯法——n皇后问题
  3. leetcode213. 打家劫舍 II
  4. leetcode541. 反转字符串 II
  5. 每天一小时python官方文档学习(四)————数据结构之列表
  6. css3边框交替动画_用css3实现惊艳面试官的背景即背景动画(高级附源码)
  7. hash table(开放寻址法-二次探查实现的哈希表)
  8. Aeroplane chess HDU - 4405(期望dp)
  9. b树与b+树的区别_面试必考:B树、B树、B+树、B*树图文详解
  10. 分析股票大数据_Python大数据分析量学祖师爷网站数据