#include<bits/stdc++.h>
using namespace std;
int n,m,s;
struct node{
int to,next,w;
}e[];
bool pc;
int dis[],head[],vis[];
inline void read(int &x)
{
x=;int f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
x*=f;
}
int num=;
void add(int x,int y,double c)
{
e[++num].to=y;
e[num].w=c;
e[num].next=head[x];
head[x]=num;
}
int cal[];
void spfa(int u,int h)
{
if(pc) return;
vis[u]=h;
for(int i=head[u];i!=-;i=e[i].next)
{
int v=e[i].to;
if(dis[v]>dis[u]+e[i].w)
{
dis[v]=dis[u]+e[i].w;
// cout<<v<<' '<<dis[v]<<endl;system("pause");
if(!vis[v]) spfa(v,h);
if(pc) return;
else if(vis[v]==h)
{
pc=true;return;
}
}
}
vis[u]=;
}
queue<int>q;
int path[];
void spfa2(int st)
{
memset(vis,,sizeof vis);
memset(path,0x3f3f3f3f,sizeof path);
vis[st]=;
path[st]=;
q.push(st);
while(!q.empty())
{
int u=q.front();q.pop();vis[u]=;
for(int i=head[u];i!=-;i=e[i].next)
{
int v=e[i].to;
if(path[v]>path[u]+e[i].w)
{
path[v]=path[u]+e[i].w;
if(!vis[v])
{
q.push(v);
vis[v]=;
}
}
}
}
}
int main()
{
memset(head,-,sizeof head);
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=m;i++)
{
int x,y,z;
read(x),read(y),read(z);
add(x,y,z);
}
pc=;
memset(dis,0x3f,sizeof dis);
memset(vis,,sizeof vis);
for(int i=;i<=n;i++)
{
spfa(i,i);
if(pc){
puts("-1");
return ;
}
}
spfa2(s);
for(int i=;i<=n;i++)
{
if(path[i]==0x3f3f3f3f){
printf("NoPath\n");
}
else{
printf("%d\n",path[i]);
}
} }

Easy sssp(spfa判负环与求最短路)的更多相关文章

  1. LightOj 1221 - Travel Company(spfa判负环)

    1221 - Travel Company PDF (English) Statistics problem=1221" style="color:rgb(79,107,114)& ...

  2. [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案

    题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...

  3. [HNOI2009]最小圈 分数规划 spfa判负环

    [HNOI2009]最小圈 分数规划 spfa判负环 题面 思路难,代码简单. 题目求圈上最小平均值,问题可看为一个0/1规划问题,每个边有\(a[i],b[i]\)两个属性,\(a[i]=w(u,v ...

  4. POJ 3259 Wormholes(SPFA判负环)

    题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...

  5. Poj 3259 Wormholes(spfa判负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...

  6. spfa判负环

    bfs版spfa void spfa(){ queue<int> q; ;i<=n;i++) dis[i]=inf; q.push();dis[]=;vis[]=; while(!q ...

  7. poj 1364 King(线性差分约束+超级源点+spfa判负环)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14791   Accepted: 5226 Description ...

  8. 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)

    传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...

  9. BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划

    BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...

随机推荐

  1. teamviewer破解版

    简介 TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制的应用程序,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamView ...

  2. 分享一下我的个人微信小程序

    分享一下我的个人微信小程序 1.有我平时整理的一些小程序相关的技术,供大家参考. 2.有几个好玩的例子 有问题可以一起参考

  3. mysql查询之分数排名

    编写一个 SQL 查询来实现分数排名.如果两个分数相同,则两个分数排名(Rank)相同 +----+-------+ | Id | Score | +----+-------+ | 1 | 3.50 ...

  4. (CSDN迁移) Java路径获取

    package unit02; /** * * @time 2014年9月18日 下午10:29:48 * @porject ThinkingInJava * @author Kiwi */ publ ...

  5. node + promise 实现文件读写

    const fs = require('fs'); const promise = new Promise((resolve, reject) => {     fs.open('./c.txt ...

  6. jenkins自动打tag

    思路: 1.手动输入需要tag的版本号,如“build001”,填写svn有权限的密码(账号默认值),填写打tag的说明 2.脚本根据tag的版本号,自动创建目录(版本号为目录名称) 3.将需要打ta ...

  7. 在ensp上的ARP及Proxy ARP

    啥是ARP?啥又是Proxy ARP? ARP是用来将 IP 地址解析为 MAC 地址的协议. ARP 表项可以分为动态和静态两种类型.动态 ARP ,是利用 ARP 广播报文,动态执行并自动进行 I ...

  8. QT_QML 界面设计Row和Column布局

    Column与Row的使用方式类似,下面以Column为例子: Column{ x: label_poseParamValue.x + label_poseParamValue.width + 10 ...

  9. 【剑指offer】面试题 18. 删除链表的节点

    面试题 18. 删除链表的节点

  10. 【LeetCode】寻找两个有序数组的中位数【性质分析+二分】

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...