• 题目973
  • 题目信息
  • 运行结果
  • 本题排行
  • 讨论区

天下第一

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 3
描述

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判环)相关推荐

  1. HDU 1217 Arbitrage (Floyd + SPFA判环)

    题目链接:HDU 1217 Arbitrage 简单的货币转换问题,给定多种货币,以及货币之间的汇率,问能否通过货币的转换实现收益. 例如: 1 US Dollar buys 0.5 British ...

  2. 算法提高课-图论-负环-AcWing 1165. 单词环:spfa判正环、二分、01分数规划

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 如何建图? 这样建图.以样例举例.起点是前两个字母,终点是末尾两个字母,边权是字符串的长度. 我们求的是什么呢? 题目要求Σ边权Σ1 ...

  3. 算法提高课-图论-负环-AcWing 361. 观光奶牛:spfa判正环、负环、01分数规划、二分

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 题目要求ΣfiΣgi\frac{\Sigma{f_i}}{\Sigma{g_i}}Σgi​Σfi​​的最大值,这种问题称为01分数规 ...

  4. poj 2049(二分+spfa判负环)

    poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...

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

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

  6. poj1860(spfa判正环)

    题目连接:http://poj.org/problem?id=1860 题意:有多种从a到b的汇率,在你汇钱的过程中还需要支付手续费,那么你所得的钱是 money=(nowmoney-手续费)*rat ...

  7. dfs版SPFA判负环

    例题 Description 泡泡鱼是一条调皮的鱼,ta的家住在一片珊瑚礁上.在ta的眼里,这些珊瑚礁的形态可以脑补成一个n个节点,m条边的带权图,在海水的腐蚀下,这些珊瑚礁形成了许多的环,ta想考考 ...

  8. POJ 3259 Wormholes SPFA判负环

    思路:SPFA判负环 数组不要开太小-- (后面附一组测试数组) // by SiriusRen #include <queue> #include <cstdio> #inc ...

  9. poj2240 最短路判环

    题意:与poj1680一样,有不同的换钱渠道,可以完成特定两种货币的交换,并且有汇率,只不过此题是单向边,然后问是否能使财富增加 与poj1680一样,建图之后直接spfa判增值的环即可 1 #inc ...

最新文章

  1. szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]
  2. oracelp---随意 记录(nvl)
  3. nacos使用_使用Nacos的CMDB实现微服务的就近访问!
  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第3篇]影响计算能力和存储能力的因素
  5. raid卡组不同raid_RAID 类型介绍
  6. Java Web ServletResponse
  7. 决策树 随机森林 xgboost_从决策树到随机森林理论篇从人话到鬼话:看不懂来找我麻烦...
  8. java mail报权限问题
  9. J2EE JavaEE 教程系列
  10. svg 填充图案_设计师:从英雄图案中获取免费的SVG背景图案
  11. 聚类算法评价指标python实现_聚类算法及其评估指标
  12. 查找算法——adjacent_find
  13. 华为交换机做qos案例_经典案例:QoS实现交换机带宽控制(1)
  14. 山东省农商行计算机真题,2018山东农商行招聘考试题库:计算机试题三
  15. mac 重置mysql root密码_MAC 重置MySQL root 密码
  16. 三元一次方程组例题_三元一次方程组习题及解答
  17. 用户管理系统功能测试报告
  18. 微信小程序用户登录功能无法使用
  19. 小度送音箱,这是只属于开发者的福利
  20. [BZOJ3817] Sum

热门文章

  1. 图形用户界面(GUI)
  2. 正则表达式语法及用法
  3. 你买的健康零食,可能是你即将踏上的健康弯路
  4. linux终端清屏命令
  5. 51的原理图和pcb的注意事项及出现的问题与解决办法
  6. RabbitMQ之Federation Exchange、Federation Queue、Shovel
  7. python执行超时退出
  8. 嵌入式ARM系统实战开发教程下载
  9. python-石头剪刀布
  10. 使用Mockito mock静态方法