题意: 给出一些关系用aX <= bY表示, 最后查询aX 和 bY的关系,是>=,==,<=,还是不能确定,还是出现了矛盾。

解法:对每一个关系其实都可以建一条X->Y的边,边权为b/a,表示X <= b/a*Y,输入完后,跑一遍floyd,对每一对点A,B跑出A<=xB的x的最小值。

因为如果真的存b/a的话,可能会损失很大的精度,但是好像这样也能过。为了更加保险,我们可以取个对数,log(b/a) = log(b)-log(a),那么乘法就变成了加法,更好计算,也更加准确。

最后就是判断了,设最后查询的是k1,k2两个点,比率为ka,kb

1.==: 如果mp[k1][k2] == -mp[k2][k1], 即是倒数关系(对数是负数关系),且mp[k1][k2] = log(kb/ka),那么就相等。

2.<=: 如果mp[k1][k2] <= log(kb/ka), 现在k1已经小于等于mp[k1][k2]了,那么肯定是小于等于log(kb/ka)的。

3.>=: -mp[k2][k1] >= log(kb/ka)

4.INCONSISTENT: 如果某个mp[i][i]为负,说明有矛盾。

5.其他情况

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <map>
#define Mod 1000000007
#define eps 1e-8
using namespace std; double mp[][];
map<string,int> ms; int sgn(double x) {
if(x > eps) return ;
if(x < -eps) return -;
return ;
} int main()
{
int n,i,j,a,b,tot,u,v,k;
string S;
while(scanf("%d",&n)!=EOF && n)
{
tot = ;
ms.clear();
for(i=;i<=*n;i++) {
for(j=;j<=*n;j++)
mp[i][j] = Mod;
mp[i][i] = 0.0;
}
for(i=;i<=n;i++) {
scanf("%d",&a);
cin>>S;
if(!ms[S]) ms[S] = ++tot;
u = ms[S];
scanf("%d",&b);
cin>>S;
if(!ms[S]) ms[S] = ++tot;
v = ms[S];
mp[u][v] = min(mp[u][v],log((double)b/(double)a));
}
for(k=;k<=tot;k++) {
for(i=;i<=tot;i++) {
for(j=;j<=tot;j++)
mp[i][j] = min(mp[i][j],mp[i][k]+mp[k][j]);
}
}
string S1,S2;
scanf("%d",&a);
cin>>S1;
int k1 = ms[S1];
scanf("%d",&b);
cin>>S2;
int k2 = ms[S2];
double rate = log((double)b/(double)a);
if(ms[S1] == || ms[S2] == ) { puts("UNAVAILABLE"); continue; }
for(i=;i<=tot;i++) if(sgn(mp[i][i]) < ) { puts("INCONSISTENT"); break; }
if(i != tot+) continue;
if(sgn(mp[k1][k2]+mp[k2][k1]) == && sgn(mp[k1][k2]-rate) == ) puts("==");
else if(sgn(mp[k1][k2]-rate) <= ) puts("<=");
else if(sgn(-mp[k2][k1]-rate) >= ) puts(">=");
else puts("UNAVAILABLE");
}
return ;
}

UVALive 4431 Fruit Weights --floyd,差分约束?的更多相关文章

  1. [luogu2474 SCOI2008]天平(floyd差分约束)

    传送门 Solution 由于重量只有三种情况,那么想到用差分约束. 由于范围比较小,想到可以floyed求差分约束,暴力求天平另一边 Code #include <cstdio> #in ...

  2. bzoj 2788 [Poi2012]Festival 差分约束+tarjan+floyd

    题目大意 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1.给出a,b (1<=a,b<=n),要求满足Xa + 1 = Xb 2.给出c,d (1&l ...

  3. UVALive - 4885 Task 差分约束

    Task 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page ...

  4. 【拓扑排序或差分约束】Guess UVALive - 4255

    题目链接:https://cn.vjudge.net/contest/209473#problem/B 题目大意:对于n个数字,给出sum[j]-sum[i](sum表示前缀和)的符号(正负零),求一 ...

  5. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  6. BZOJ_2788_[Poi2012]Festival_差分约束+tarjan+floyed

    BZOJ_2788_[Poi2012]Festival_差分约束+tarjan+floyed Description 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: ...

  7. 【题解】 [POI2012]FES-Festival (差分约束)

    懒得复制题面,戳我戳我 Question: (因为网上找不到好的翻译,这里简单复述一下) 告诉你\(m1+m2\)个约束条件,然后要你找出\(X_1-X_n\)这些数字,求满足要求的数列中不同的数字个 ...

  8. 【BZOJ1077】天平(差分约束)

    [BZOJ1077]天平(差分约束) 题面 BZOJ 洛谷 题解 利用矩阵可以很容易得到两个点之间的最大差和最小差,再利用这个信息判断即可.差分约束用\(Floyd\)计算.时间复杂度\(O(n^3) ...

  9. [SCOI2008]天平 差分约束

    ---题面--- 题解: 差分约束学得实在是太烂了,,,,QAQ 这里先记下: a - b >= x  ---> a >= b + x     ---->        b - ...

随机推荐

  1. 利用SHELL脚本实现文件完整性检测程序(1.2版更新)

    一..开发背景 因时势所逼,需要对服务器的文件系统实行监控.虽然linux下有不少入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手.自己琢磨着也不需要什么多复杂的功能,写个脚本应该就可以满足基本 ...

  2. 响应式WEB设计的9项基本原则

    响 应式Web设计对于解决多类型屏幕问题来说是个不错方案,但从印刷的角度来看,其却存在着很多的困难.没有固定的页面尺寸.没有毫米或英寸,没有任何物理 限制,让人感到无从下手.随着建立网站可用的各种小工 ...

  3. 记录最初工作下的笔记($.each)

    没事开始写博客,留下以前工作中常用的笔记,内容不全或者需要补充的可以留言,我只写我常用的. each遍历在工作中很常用,平时工作最常用的就是快速找到html上dom节点以达到找寻数据,和ajax接受j ...

  4. 50个新的汉化Demo!纯前端 Wijmo 放大招

    Wijmo 是为企业应用程序开发而推出的一系列包含 HTML5 和 JavaScript 的开发控件,包含 Wijmo 5 . Wijmo 3 及面向企业级应用的控件金融图表.FlexSheet 和 ...

  5. Null value was assigned to a property of primitive type setter of

    在SSH项目的开发中遇到了下面的错误: 检查后发现数据库和映射文件中这个字段是允许为空的,为什么还要出错呢?原来是因为这个字段是int的,int是基本类型,即使设置成可以为空也不能取空值. 解决的办法 ...

  6. Error LNK1104 cannot open file 'libboost_system-vc140-mt-gd-1_58.lib'

    I had a similar problem when trying to use boost unit testing in Visual Studio 2015 (Community Editi ...

  7. E - The Values You Can Make

    E - The Values You Can Make Description Pari wants to buy an expensive chocolate from Arya. She has ...

  8. 【PHP资源】PHP 资源大全

    看到这篇文章不错,转来收藏 依赖管理 依赖和包管理库 Composer/Packagist:一个包和依赖管理器 Composer Installers:一个多框架Composer库安装器 Pickle ...

  9. java语言中除数为零问题

    在以下几个例子中,输出结果如何? float aa=0; System.out.println(aa/0); System.out.println(1/aa); System.out.println( ...

  10. Sap SE16n 修改表数据

    SAP中直接修改表.视图的Tcode有SE16N和SM30. 其中使用SE16N修改表需要先输入命令&SAP_EDIT, 回车左下角显示激活SAP编辑功能后,就可以对相应的表进行新增.删除.修 ...