在看完其他出题人出的毒瘤题之后,良心出题人终于看不下去了,决定出一道模板题来送给大家一个AC,那么,你们能不能接住这个送来的AC呢?

给出一个$$$n$$$个结点$$$m$$$条边的带权有向图,若图中存在负权回路直接输出"-1",否则输出点$$$s$$$到每个点的最短路的长度,如果$$$s$$$点不连通,输出"NoPath"。

Input

第一行输入三个值$$$n,m,s(2 \leq n \leq 1000,m\leq 10^5,1\leq s \leq N)$$$

接下来m行,每行三个整数$$$u,v,w$$$表示$$$u$$$和$$$v$$$之间有一条权值为$$$w$$$的有向边$$$(1<=u,v,s=N,-10^6<=w<=10^6)$$$。

Output

如果存在负权环,输出"-1"

否则输出$$$n$$$行,分别表示$$$s$$$点到$$$i$$$点的最短路,如果$$$s=i$$$输出0。

Example

Input

6 7 1
1 2 6
1 3 4
2 4 5
3 5 4
3 6 3
4 5 1
6 4 2

Output

0
6
4
9
8
7

spfa(算法)

#include <iostream>
#include <bits/stdc++.h>
#include <string.h>
#include <math.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int N = 1e5+5;
const ll inf = 0x3f3f3f3f3f3f3f3f;
int n,cnt;
int cntt[N],head[N];
ll dis[N],dis1[N];
bool vis[N];
struct Edge
{int to,w,ne;//Edge() {}//Edge(int to,int w,int ne)://to(to),w(w),ne(ne) {}
} e[N];
int ans[N],an[N];void add(int u,int v,int w)
{e[cnt].to = v;e[cnt].w = w;e[cnt].ne = head[u];head[u] = cnt++;
}bool spfa(int s,ll *dis)
{dis[s]=0;vis[s]=1;int v;queue<int>q;q.push(s);while(!q.empty()){v=q.front();q.pop();vis[v]=0;for(int i=head[v]; i!=-1; i=e[i].ne){if(dis[e[i].to]>dis[v]+e[i].w){dis[e[i].to] = dis[v]+e[i].w;if(vis[e[i].to]==0){cntt[e[i].to]++;vis[e[i].to]=1;q.push(e[i].to);if(cntt[e[i].to] >= n){return true;}}}}}return false;
}void init()
{cnt = 0;mem(vis,0);mem(e,0);mem(dis,inf);mem(cntt,0);mem(head,-1);mem(ans,0);
}int main()
{int m,s;while(cin >> n >> m >> s){init();for(int i = 1; i<=m; i++){int u,v,w;cin >> u >> v >> w;add(u,v,w);}bool ok = spfa(s,dis);int tot = 0;if(!ok){for(int i = 1; i <= n; i++){if(i == s){continue;}if(dis[i] == inf){ans[tot++] = i;}}if(tot == n-1){cout << "NoPath" << endl;}else{bool f = false;for(int i = 0; i < tot; i++){f=spfa(ans[i],dis1);if(f){cout << "-1" << endl;break;}}if(f == false){for(int i = 1; i <= n; i++){if(dis[i] == inf){cout << "NoPath" << endl;}else{cout << dis[i] << endl;}}}}}else{cout << "-1" << endl;}}return 0;
}

J - 【黄色】这题真的是模板题 (Gym - 102072J )(spfa)相关推荐

  1. 在线题库html模板,题库分类.html

     题库分类 $axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; ...

  2. CSP认证 201503-3 节日[C++题解]:模拟、枚举、日期题、日期模板题

    题目分析 来源:acwing 分析: 每月有多少天用数组months[]来存储,下标是1 ~ 12,二月存的是平年28天.另外,星期1到星期日的下标是0~6,起点1850 年 1 月 1 日是星期二, ...

  3. CSP认证201509-4 高速公路[C++题解]:强连通分量、tarjan算法模板题

    题目分析 来源:acwing 分析: 所求即为强连通分量的个数,然后计算每个强连通分量中点的个数,相加即可. 所谓强连通分量,它是一个子图,其中任意两点可以相互到达,并且再加一个点,就不能满足任意两点 ...

  4. 小雨的矩阵(DFS三参数模板题)

    E-小雨的矩阵 题目描述 小雨有一个n×n 的矩阵,起点在(1,1),终点在(n,n),只能向下或向右走,且每次只能走 1 步. 矩阵上每个点都有一个点权a(i,j). 求走到终点的路径有多少不同的点 ...

  5. 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)

    链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...

  6. J.哭泣的阿木木(线段树模板题)

    哭泣的阿木木 Description 没啥用的背景故事: 在远古的恕瑞玛,有一个孤独而又忧郁的灵魂,阿木木.他在世间游荡,只为找到一个朋友.他遭受了一种远古的巫术诅咒,注定忍受永世的孤单,因为被他触碰 ...

  7. HDU1166 敌兵布阵(树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包

    动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...

  9. 匈牙利算法——最大匹配问题详解(附模板题)

    基本概念转自  https://blog.csdn.net/dengheCSDN/article/details/77619308 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名. ...

最新文章

  1. D - Fliptile POJ - 3279(翻转问题)
  2. 京东ajax怎么用,使用Ajax、json实现京东购物车结算界面的数据交互实例
  3. 【Nginx那些事】nginx配置实例(三)动静分离
  4. python template engine
  5. node获取图片路径_Deno 正式发布,彻底弄明白和 node 的区别
  6. Python爬取豆瓣网中即将上映的电影数据清单
  7. C#扩展名关联【转】
  8. VB代码 VB小程序
  9. matlab求函数在区间内最大值与最小值
  10. AndroidImageSlider三分钟快速集成酷炫自动轮播广告
  11. Linux日期计算器,【C++】日期类+日期万年历+日期计算器
  12. 你想学习吗?你会学习吗?你知道该如何学习吗?学习之道-读书笔记
  13. Qt下使用vs编译的库文件
  14. 医疗器械注册文件清单 2022.5.26
  15. PreScan快速入门到精通第三十四讲基于PreScan进行超声波雷达传感器仿真
  16. 【DBC】DBC文件格式详解
  17. BGA焊点气泡的分布与原因
  18. 人工神经网络的训练步骤,人工神经网络建模步骤
  19. 华数工业机器人教学视频_华数六轴工业机器人技术知识讲解介绍
  20. 软件测试技术(七)自动化测试

热门文章

  1. python程序设计第二章序列类型 题库及选解
  2. 全自动配色网站。前端人员练手项目。专业配色网站
  3. 大疆无人机飞行+摄影测量航测不完全教程
  4. 评论-Mophie果汁包(不是果汁包空气)
  5. 电脑突然死机怎么办?正确做法在这!
  6. DODAB纳米脂质体囊泡/PANC-1细胞膜的PEG修饰的脂质体M-PEG-LIP的相关研究与制备
  7. php编写跑马灯,使用C++的编程风格写一个跑马灯的例程
  8. 互联网金融:为什么贷前风控需要进行手机号码验证(联通、移动、电信)
  9. 外汇天眼:外汇储备减少对新兴市场货币构成风险
  10. VIM_readme