题目背景

我是源点,你是终点。我们之间有负权环。 ——小明

题目描述

在小明和小红的生活中,有\(N\)个关键的节点。有\(M\)个事件,记为一个三元组\((S_i,T_i,W_i)\),表示从节点\(S_i\)有一个事件可以转移到\(T_i\),事件的效果就是使他们之间的距离减少\(W_i\)。

这些节点构成了一个网络,其中节点\(1\)和\(N\)是特殊的,节点\(1\)代表小明,节点\(N\)代表小红,其他代表进展的阶段。所有事件可以自由选择是否进行,但每次只能进行当前节点邻接的。请你帮他们写一个程序,计算出他们之间可能的最短距离。

输入输出格式

输入格式:

第\(1\)行,两个正整数\(N,M\).

之后\(M\)行,每行\(3\)个空格隔开的整数\(S_i,T_i,W_i\)。

输出格式:

一行,一个整数表示他们之间可能的最短距离。如果这个距离可以无限缩小,输出\(“Forever love”\)(不含引号)。

输入输出样例

输入样例#1:

3 3
1 2 3
2 3 -1
3 1 -10

输出样例#1:

-2

说明

对于\(20\%\)数据,\(N \leq 10,M \leq 50\)。

对于\(50\%\)数据,\(N \leq 300,M \leq 5000\)。

对于全部数据,\(N \leq 1000,M \leq 10000,|W_i| \leq 100\),保证从节点\(1\)到\(N\)有路径。

思路:题意就是让你在一张图上找一条从\(1\)号点到\(n\)号点的最短路径,如果这条路径可以无限缩小,那么就输出\(“Forever love”\),即存在负环,所以我们可以用\(spfa\)判断负环,如果一个点入队列超过\(n\)次,那么一定存在负环,这时直接输出\(“Forever love”\)并退出程序,然后spfa的过程中更新\(dis\)数组,即\(1\)号点到其它点的最短距离,然后这道题还有一个坑点就是距离不一定只有\(1\)号点能拉近,\(n\)号点也能,所以我们要用两遍\(spfa\),分别以\(1\)号点和\(n\)号点为起点,然后取两次\(dis[end]\)的最大值,其中\(end\)表示两次\(spfa\)的重点。

代码:

#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define maxn 1007
using namespace std;
int n,m,head[maxn],in[maxn],dis[maxn],num;
bool vis[maxn];
inline int qread() {
char c=getchar();int num=0,f=1;
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) num=num*10+c-'0';
return num*f;
}
struct node {
int v,w,nxt;
}e[20007];
inline void ct(int u, int v, int w) {
e[++num].v=v;
e[num].w=w;
e[num].nxt=head[u];
head[u]=num;
}
inline void spfa(int s) {
memset(dis,0x3f,sizeof(dis));
queue<int>q;
q.push(s);
dis[s]=0,in[s]=1,vis[s]=1;
while(!q.empty()) {
int u=q.front();q.pop();
vis[u]=0;
for(int i=head[u];i;i=e[i].nxt) {
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w) {
dis[v]=dis[u]+e[i].w;
if(!vis[v]) {
q.push(v),vis[v]=1;
in[v]++;
if(in[v]>n) {printf("Forever love\n");exit(0);}
}
}
}
}
}
int main() {
n=qread(),m=qread();
for(int i=1,u,v,w;i<=m;++i) {
u=qread(),v=qread(),w=qread();
ct(u,v,-w);
}
spfa(1);int zrj=dis[n];
spfa(n);int cyh=dis[1];
printf("%d\n",min(zrj,cyh));
return 0;
}

洛谷P2136 拉近距离的更多相关文章

  1. 洛谷 P2136 拉近距离 题解

    P2136 拉近距离 题目背景 我是源点,你是终点.我们之间有负权环. --小明 题目描述 在小明和小红的生活中,有N个关键的节点.有M个事件,记为一个三元组(Si,Ti,Wi),表示从节点Si有一个 ...

  2. P2136 拉近距离(spfa判负环)

    洛谷—— P2136 拉近距离 题目背景 我是源点,你是终点.我们之间有负权环. ——小明 题目描述 在小明和小红的生活中,有N个关键的节点.有M个事件,记为一个三元组(Si,Ti,Wi),表示从节点 ...

  3. 洛谷——T P2136 拉近距离

    https://www.luogu.org/problem/show?pid=2136 题目背景 我是源点,你是终点.我们之间有负权环. ——小明 题目描述 在小明和小红的生活中,有N个关键的节点.有 ...

  4. P2136 拉近距离

    我也想有这样的爱情故事,可惜我单身 其实这道题就是一个比较裸的最短路问题.对于一个三元组 (S,W,T) ,S其实就是一个端点,而W就是到达的端点,连接两个端点的边长为-T,注意要取一个相反数,这样才 ...

  5. [洛谷OJ] P1114 “非常男女”计划

    洛谷1114 “非常男女”计划 本题地址:http://www.luogu.org/problem/show?pid=1114 题目描述 近来,初一年的XXX小朋友致力于研究班上同学的配对问题(别想太 ...

  6. 洛谷 P1169 [ZJOI2007]棋盘制作

    2016-05-31 14:56:17 题目链接: 洛谷 P1169 [ZJOI2007]棋盘制作 题目大意: 给定一块矩形,求出满足棋盘式黑白间隔的最大矩形大小和最大正方形大小 解法: 神犇王知昆的 ...

  7. 洛谷 P2279 03湖南 消防局的设立

    2016-05-30 16:18:17 题目链接: 洛谷 P2279 03湖南 消防局的设立 题目大意: 给定一棵树,选定一个节点的集合,使得所有点都与集合中的点的距离在2以内 解法1: 贪心 首先D ...

  8. 洛谷P1220 关路灯

    洛谷1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关 ...

  9. 【洛谷P1352】没有上司的舞会

    [洛谷P1352]没有上司的舞会 x舷售 锚」翅θ 但是 拙臃 蓄ⅶ榔 暄条熨卫 翘ヴ馇 表现无愧于雪月工作室的核心管理 爸惚扎掬 颇瓶 芟缆肝 貌痉了 洵┭笫装 嗝◇裴腋 褓劂埭 ...

随机推荐

  1. sudo执行提示Command not found

    运行一命令在普通用户下可行,切换到root用户依然可行,但在普通用户下使用sudo执行时,提示Command not found. 修改/etc/sudoers文件,找到类似下面的一行: Defaul ...

  2. 如何去掉ArrayList重复的id

    今天,也同样跟你一样寻找这个问题的解决办法, 如何去掉ArrayList重复的id 百度中找到这么一句话,为什么想到要去掉呢?为什么不反过来想,我在往ArrayList里添加的时候不让重复的项加入呢? ...

  3. html5--1.8超链接下

    html5--1.8超链接下 下面演示链接打开新网友不关闭原网页. 外部网站: 百度 这是用a标签的target属性实现的,用的target="_blank" 这样新出现的页面会另 ...

  4. c# 实现WebSocket

    用C# ASP.NET MVC 实现WebSocket ,对于WebSocket想必都很了解了,不多说. 东西做的很粗糙 只能实现基本的聊天功能,不过基本的通信实现了,那么后序的扩展应该也不难(个人这 ...

  5. linux cpu占用100%排查

    某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警. 问:如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代 ...

  6. Java se 知识图解

  7. 华为USG6500系列

    华为USG6500: ssh 登录配置 time-range 相关配置:<USG6000V1>system-view Enter system view, return user view ...

  8. 主备角色switch

    理论知识:Switchover 切换允许primary 和一个备库进行切换,并且这种切换没有数据丢失. 前提条件: 1) 主备库相关参数 fal_client.fal_server .standby_ ...

  9. 对于makefile传递参数的一些问题

    makefile变量说明: 1.总控Makefile中使用“-e”参数覆盖下一层Makefile中的变量. 2.父级Makefile向子级Makefile传送变量方式:export <varia ...

  10. Spring框架中的@Import、@ImportResource注解

    spring@Import @Import注解在4.2之前只支持导入配置类 在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean 使用场景: import注解主要用在基于ja ...