【洛谷 2136】拉近距离
时间:2019-11-07
本文章向大家介绍【洛谷 2136】拉近距离,主要包括【洛谷 2136】拉近距离使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目背景
我是源点,你是终点。我们之间有负权环。 ——小明
题目描述
在小明和小红的生活中,有N个关键的节点。有M个事件,记为一个三元组(Si,Ti,Wi),表示从节点Si有一个事件可以转移到Ti,事件的效果就是使他们之间的距离减少Wi。
这些节点构成了一个网络,其中节点1和N是特殊的,节点1代表小明,节点N代表小红,其他代表进展的阶段。所有事件可以自由选择是否进行,但每次只能进行当前节点邻接的。请你帮他们写一个程序,计算出他们之间可能的最短距离。
输入格式
第1行,两个正整数N,M.
之后M行,每行3个空格隔开的整数Si,Ti,Wi。
输出格式
一行,一个整数表示他们之间可能的最短距离。如果这个距离可以无限缩小,输出“Forever love”(不含引号)。
输入输出样例
输入 #1
3 3 1 2 3 2 3 -1 3 1 -10
输出 #1
-2
说明/提示
对于20%数据,N<=10,M<=50。
对于50%数据,N<=300,M<=5000。
对于全部数据,N<=1000,M<=10000,|Wi|<=100,保证从节点1到N有路径。
题解:spfa还没死,继续spfa肝题
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<cstdlib> #include<algorithm> #include<queue> using namespace std; const int N=20002; const string out="Forever love"; int cnt,x,y,z,n,m,ok[N]; struct node{ int next; int to; int val; }e[N]; int head[N],dis[N],vis[N]; void add(int x,int y,int z){ e[++cnt].val=z; e[cnt].to=y; e[cnt].next=head[x]; head[x]=cnt; } int flag=0; void spfa(int jjj){ queue<int>q; memset(dis,0x3f,sizeof(dis)); q.push(jjj); vis[jjj]=1; dis[jjj]=0; while(!q.empty()){ x=q.front(); q.pop(); vis[x]=0; if(ok[x]>n){ cout<<out<<endl;exit(0); flag=1; return ; } for(int i=head[x];i;i=e[i].next){ y=e[i].to; if(dis[y]>dis[x]+e[i].val){ dis[y]=dis[x]+e[i].val; if(vis[y]==0) { q.push(y); ok[y]++; vis[y]=1; } } } } return ; } int main(){ freopen("2136.in","r",stdin); freopen("2136.out","w",stdout); scanf("%d %d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d %d %d",&x,&y,&z); add(x,y,-z); } if(flag==1) return 0; spfa(1); int s1=dis[n]; spfa(n); int s2=dis[1]; printf("%d",min(s1,s2)); return 0; }
原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11810695.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP7创建COOKIE和销毁COOKIE的实例方法
- PHP实现新型冠状病毒疫情实时图的实例
- 深入浅析Python2.x和3.x版本的主要区别
- 用户态进程如何得到虚拟地址对应的物理地址?
- Linux中利用grep命令如何检索文件内容详解
- laravel框架学习笔记之组件化开发实现方法
- PHP7创建销毁session的实例方法
- Vim如何使用相对行号实现一切操作详解
- laravel 框架执行流程与原理简单分析
- 对python自动生成接口测试的示例讲解
- 解决pip install xxx报错SyntaxError: invalid syntax的问题
- PHP如何使用JWT做Api接口身份认证的实现
- 解决python3 Pycharm上连接数据库时报错的问题
- php把文件设置为插件的技巧方法
- Python中fnmatch模块的使用详情