nyoj973 天下第一(spfa判环)
- 题目973
- 题目信息
- 运行结果
- 本题排行
- 讨论区
天下第一
- 描述
-
AC_Grazy一直对江湖羡慕不已,向往着大碗吃肉大碗喝酒的豪情,但是“人在江湖漂,怎能
不挨刀",”人在江湖身不由己",如果自己的武功太差,在江湖会死的很惨,但是AC_Grazy没有
武功秘籍练不了绝世武功.有道是“山重水复疑无路,柳暗花明又一村”,在AC_Grazy家里面
竟然藏着一本书,书名竟然叫做【超级外挂】,竟然能在各种武功之间进行转化,据说是他爷
爷的爷爷的...爷爷传下来的...
闲着无事便拿来看看,只看一眼便再也停不下了,只见上面写着“纵横武林打遍天下无敌手武功心法秘籍收录”.
翻开第一篇一看竟然是【降龙十八掌】...
心法只是一个修练武功的途径,重要的是真气的多少,于是他便想利用外挂让武功之间进行转
化,来让真气无限增加,但是这个心法只能按照顺序转化,我们分别用 1号和2号来代替两种功法 当然转化会有一定的转化率f
比如1 0.5 2 便是把 1的一半真气转化给2 ,为了简化问题,我们每次都从1号秘籍开始进行转化,如果其中一个秘籍转化断了,那么以后的功法就不能转换。
- 输入
-
输入:首先输入一个数 T(T<=20)表示T组数据
然后输入两个数n(2<=n<=500)和m(1=<m<=2000)分别表
示有n种秘籍,随后的m行分别输入
秘籍u(n>=u>0) 转化率 f (0<f<=10)秘籍 v.(0<v<=n)
- 输出
- 输出:如果可以无限增加真气输出Yes否则输出No.
- 样例输入
-
2 3 3 1 2 2 2 2 3 3 2 1 4 3 1 2 2 3 2 4 4 2 3
- 样例输出
-
Yes No
- 上传者
-
ACM_王亚龙
以前做过一次 不过那时候不够深刻了解判断成环的原理
今天仔细又看了一遍 当某个顶点进入队列的次数大于它的入度时候 可以判断已经成环
#include <stdio.h> #include <algorithm> #include <string.h> #include <vector> #include <queue> using namespace std; double f[505][505],dist[505];//f为转换率 dist源点到各点的路径 int n,m,sum[505];//n为点的个数,m为边的个数,sum为进队列的次数 int in_degree[505];//入度 判断是否成环 bool in[505];//判断是否在队列中 vector<int>list[505];//邻接表 queue<int>s; bool spfa(int pos) { while(!s.empty()) s.pop(); sum[pos]++; in[pos]=true; dist[pos]=1.0; s.push(pos); while(!s.empty()) { pos=s.front(); s.pop(); in[pos]=false; for(int i=0;i<list[pos].size();i++) { int x=list[pos][i]; if(dist[x]<dist[pos]*f[pos][x]) { dist[x]=dist[pos]*f[pos][x]; if(!in[x]) { s.push(x); in[x]=true; //已经成环 真气可以无限增加 if(++sum[x]>in_degree[x]) return true; } } } } return false; } int main() { int ncase; scanf("%d",&ncase); while(ncase--) { memset(f,0,sizeof(f)); memset(list,0,sizeof(list)); memset(in,false,sizeof(in)); memset(sum,0,sizeof(sum)); memset(dist,0,sizeof(dist));memset(in_degree,0,sizeof(in_degree)); scanf("%d %d",&n,&m); for(int i=0;i<m;i++) { int a,b; double x; scanf("%d %lf %d",&a,&x,&b); f[a][b]=max(f[a][b],x); in_degree[b]++; //建邻接表 list[a].push_back(b); } if(spfa(1)) printf("Yes\n"); else printf("No\n"); } }
nyoj973 天下第一(spfa判环)相关推荐
- HDU 1217 Arbitrage (Floyd + SPFA判环)
题目链接:HDU 1217 Arbitrage 简单的货币转换问题,给定多种货币,以及货币之间的汇率,问能否通过货币的转换实现收益. 例如: 1 US Dollar buys 0.5 British ...
- 算法提高课-图论-负环-AcWing 1165. 单词环:spfa判正环、二分、01分数规划
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 如何建图? 这样建图.以样例举例.起点是前两个字母,终点是末尾两个字母,边权是字符串的长度. 我们求的是什么呢? 题目要求Σ边权Σ1 ...
- 算法提高课-图论-负环-AcWing 361. 观光奶牛:spfa判正环、负环、01分数规划、二分
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 题目要求ΣfiΣgi\frac{\Sigma{f_i}}{\Sigma{g_i}}ΣgiΣfi的最大值,这种问题称为01分数规 ...
- poj 2049(二分+spfa判负环)
poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...
- [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案
题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...
- poj1860(spfa判正环)
题目连接:http://poj.org/problem?id=1860 题意:有多种从a到b的汇率,在你汇钱的过程中还需要支付手续费,那么你所得的钱是 money=(nowmoney-手续费)*rat ...
- dfs版SPFA判负环
例题 Description 泡泡鱼是一条调皮的鱼,ta的家住在一片珊瑚礁上.在ta的眼里,这些珊瑚礁的形态可以脑补成一个n个节点,m条边的带权图,在海水的腐蚀下,这些珊瑚礁形成了许多的环,ta想考考 ...
- POJ 3259 Wormholes SPFA判负环
思路:SPFA判负环 数组不要开太小-- (后面附一组测试数组) // by SiriusRen #include <queue> #include <cstdio> #inc ...
- poj2240 最短路判环
题意:与poj1680一样,有不同的换钱渠道,可以完成特定两种货币的交换,并且有汇率,只不过此题是单向边,然后问是否能使财富增加 与poj1680一样,建图之后直接spfa判增值的环即可 1 #inc ...
最新文章
- szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]
- oracelp---随意 记录(nvl)
- nacos使用_使用Nacos的CMDB实现微服务的就近访问!
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第3篇]影响计算能力和存储能力的因素
- raid卡组不同raid_RAID 类型介绍
- Java Web ServletResponse
- 决策树 随机森林 xgboost_从决策树到随机森林理论篇从人话到鬼话:看不懂来找我麻烦...
- java mail报权限问题
- J2EE JavaEE 教程系列
- svg 填充图案_设计师:从英雄图案中获取免费的SVG背景图案
- 聚类算法评价指标python实现_聚类算法及其评估指标
- 查找算法——adjacent_find
- 华为交换机做qos案例_经典案例:QoS实现交换机带宽控制(1)
- 山东省农商行计算机真题,2018山东农商行招聘考试题库:计算机试题三
- mac 重置mysql root密码_MAC 重置MySQL root 密码
- 三元一次方程组例题_三元一次方程组习题及解答
- 用户管理系统功能测试报告
- 微信小程序用户登录功能无法使用
- 小度送音箱,这是只属于开发者的福利
- [BZOJ3817] Sum