COJ1978-LXX的图论题
LXX的图论题
Description
由于lxx的图论和数据结构太弱了,大佬Z决定为lxx补一补。于是大佬Z为lxx出了一道题目,题目如下:给出一张有向图,图中有n个点,m条边,每条边上都有一个权值w,问图中是否存在满足以下条件的点i,j,…p使得不等式w[i][j] * w[j][k] * …. * w[p][i]<1成立。奈何lxx太弱了,他决定寻求你的帮助。
Input
多组输入,以文件结尾。第一行两个整数n( 1<=n<=500 ),m( 1<=m<=n*(n-1)/2 ),接下来m行,每行3个数x,y,z,(x≠y):表示x到y有一条边,权值为z(0< z<20,且保证z小数点后面最多只有一位)。
Output
如果存在满足题目所描述的式子,输出“YES”,否则输出“NO”。
Sample Input
2 2
1 2 0.9
2 1 1.2
6 4
1 2 0.1
2 4 0.8
4 1 12
4 1 15
Sample Output
NO
YES
Hint
点的编号为1~n
Source
2017年8月月赛
Author
廖璇璇
题目大意:判断是否有环边权乘积小于1
解题思路:根据对数,将乘积化为和,用bellman-ford判断是否存在负环即可。
/*
单源最短路bellman_ford算法,复杂度O(VE)
可以处理负边权图。
可以判断是否存在负环回路。返回true,当且仅当图中不包含从源点可达的负权回路
vector<Edge> E;先E.clear()初始化,然后加入所有边
点的编号从1开始(从0开始简单修改就可以了)
*/
#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
#include<fstream>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=550;
double dist[MAXN];struct Edge
{int u,v;double cost;Edge(int _u=0,int _v=0,double _cost=0):u(_u),v(_v),cost(_cost){}
};vector<Edge> E;bool bellman_ford(int start,int n)//点的编号从1开始
{for(int i=1;i<=n;i++) dist[i]=INF;dist[start]=0;for(int i=1;i<n;i++){bool flag=false;for(int j=0;j<E.size();j++){int u=E[j].u;int v=E[j].v;double cost=E[j].cost;if(dist[v]>dist[u]+cost){dist[v]=dist[u]+cost;flag=true;}}if(!flag) return true;//没有负环回路}for(int j=0;j<E.size();j++)if(dist[E[j].v]>dist[E[j].u]+E[j].cost)return false;//有负环回路return true;//没有负环回路
}int main()
{int n,e;while(scanf("%d%d",&n,&e)!=EOF){if(!E.empty()) E.clear();int u,v;double c;for(int i=0;i<e;i++){scanf("%d%d%lf",&u,&v,&c);E.push_back(Edge(u,v,log2(c)));}bool mark=bellman_ford(1,n);if(mark) printf("NO\n");else printf("YES\n");}return 0;
}
COJ1978-LXX的图论题相关推荐
- GDOI 2018 Day1 小学生图论题
小学生图论题 Description 有一个点数为nnn的竞赛图,每条边的的方向等概率随机. 现在给出m" role="presentation" style=" ...
- csu1978LXX的图论题(floyd)
Description 由于lxx的图论和数据结构太弱了,大佬Z决定为lxx补一补.于是大佬Z为lxx出了一道题目,题目如下:给出一张有向图,图中有n个点,m条边,每条边上都有一个权值w,问图中是否存 ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
- JZOJ 5700. 【gdoi2018 day1】小学生图论题(graph)
Description Input Output Sample Input Sample Input1 10 2 2 1 3 3 7 8 9 Sample Input2 3 0 Sample Outp ...
- 【NOIP模拟】图论题Graph
题面 n点2n-2条有向边,数据先给一颗1为根的生成树边集,边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点 到达. 2. 接下来的 N-1 ...
- [gdoi2018 day1]小学生图论题【分治NTT】
正题 题目大意 一张随机的nnn个点的竞赛图,给出它的mmm条相互无交简单路径,求这张竞赛图的期望强联通分量个数. 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 ...
- 【NOIP校内模拟】图论题
设dis[i]表示根节点到i的距离(只经过树边),再设w[i]表示i到1这条边的距离 对于u和v我们考虑两种情况 ①.当u是v的祖先 则答案为dis[v]-dis[u] ②.当u不是v的祖先,明确从1 ...
- 【gdoi2018 day1】小学生图论题
题目大意: lj竞赛图. 题解: 考虑把强联通分量缩点,大概是这样的(画图水平有限): 看那些红色标记的边,强联通分量个数=红色边的个数+1 红色边的判定条件? 设它左边的点集为S,右边的为T. S到 ...
- 理论基础 —— 图 —— 图的存储结构
[邻接矩阵] 图的邻接矩阵存储也称数组表示法,其方法是用一个一维数组存储图中的顶点,用一个二维数组存储图中的所有的边,存储顶点之间邻接关系的二维数组称为邻接矩阵. 设图 G=(V,E) 具有 n 个顶 ...
最新文章
- C++中的静态绑定与动态绑定
- 十个简单好用的设计技巧[SM]
- Altera FPGA管脚弱上拉电阻详细设置方法
- vue父组件异步获取动态数据传递给子组件获取不到值
- 在线学习新编程 技巧全攻略
- linux时间有几个,Linux下与文件相关的几个时间的介绍
- 计算机电源不能启动不了,电脑不开机,常见原因有哪些,怎么处理,黑屏怎么办...
- replace语句的使用---鸡肋命令
- 西瓜无水印视频批量下载,一个脚本就够了,手把手教你批量下载西瓜无水印高清视频。
- 异常:com.alibaba.druid.sql.parser.ParserException: ERROR. token : DESC, pos : 72
- KindEditor编辑器上传修改拿shell漏洞
- CatBoost参数解释
- 4G七问, 读懂4G的核心问题
- MySql数据库三种关系详解
- Focusky教程 | 为什么导入PPT后有的图片没有显示?
- Docker 快速学习手册及相关笔记 附带一些问题解决方案
- 数据结构之线索二叉树详细解释
- 汉诺塔的递归逐步详解
- 我的第一篇博客:Python爬取新浪财经股票页面 并用matplotlib可视化输出结果
- 京东购物车(动态)网页搭建,利用JavaScript实现