题目描述

输入输出格式

输入格式:

从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要你判断。每组数据的第一行为两个正整数n和m,其中n < 100,m < 1000,分别表示对应的账本记录了多少个月的收入情况以及偷看了多少次账本。接下来的m行表示刁姹偷看m次账本后记住的m条信息,每条信息占一行,有三个整数s,t和v,表示从第s个月到第t个月(包含第t个月)的总收入为v,这里假设s总是小于等于t。

输出格式:

输出文件output.txt中包含w行,每行是true或false,其中第i行为true当且仅当第i组数据,即第i个账本不是假的;第i行为false当且仅当第i组数据,即第i个账本是假的。

输入输出样例

输入样例#1:

  1. 2
  2. 3 3
  3. 1 2 10
  4. 1 3 -5
  5. 3 3 -15
  6. 5 3
  7. 1 5 100
  8. 3 5 50
  9. 1 2 51
输出样例#1:

  1. true
  2. false
  3.  
  4. 题解

差分约束,对于x1-x2=k,那么要同时满足x1-x2>=k和x1-x2<=k,即双向都建边,只是权值一正一负

当一个节点不同路径到达一个节点的距离不同时即为false,否则为true

我的方法不需要判负环,因为在bfs中不同路径不同距离就会弹出,已经包含了负环的情况

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. struct Node
  7. {
  8. int next,to,dis;
  9. }edge[];
  10. int num,head[],q[],vis[],dist[],ss,n,m;
  11. void add(int u,int v,int d)
  12. {
  13. num++;
  14. edge[num].next=head[u];
  15. head[u]=num;
  16. edge[num].to=v;
  17. edge[num].dis=d;
  18. }
  19. bool bfs(int x)
  20. {int h,t,i;
  21. h=;t=;
  22. q[]=x;
  23. vis[x]=;
  24. while (h<t)
  25. {
  26. h++;
  27. h%=;
  28. int u=q[h];
  29. for (i=head[u];i;i=edge[i].next)
  30. {
  31. int v=edge[i].to;
  32. if (dist[v]==ss)
  33. {
  34. dist[v]=dist[u]+edge[i].dis;
  35. if (vis[i]==)
  36. {
  37. t++;
  38. t%=;
  39. q[t]=v;
  40. vis[i]=;
  41. }
  42. }
  43. else if (dist[v]!=dist[u]+edge[i].dis)
  44. return ;
  45. }
  46. }
  47. return ;
  48. }
  49. int main()
  50. {int T,i,x,y,d,sign;
  51. cin>>T;
  52. while (T--)
  53. {
  54. cin>>n>>m;
  55. num=;
  56. memset(edge,,sizeof(edge));
  57. memset(head,,sizeof(head));
  58. for (i=;i<=m;i++)
  59. {
  60. scanf("%d%d%d",&x,&y,&d);
  61. add(x,y+,d);
  62. add(y+,x,-d);
  63. }
  64. sign=;
  65. memset(dist,,sizeof(dist));
  66. memset(vis,,sizeof(vis));
  67. ss=dist[];
  68. for (i=;i<=n;i++)
  69. if (vis[i]==&&bfs(i))
  70. {
  71. sign=;
  72. break;
  73. }
  74. if (sign==)
  75. printf("false\n");
  76. else printf("true\n");
  77. }
  78. }

[HNOI2005]狡猾的商人的更多相关文章

  1. [BZOJ1202][HNOI2005]狡猾的商人

    [BZOJ1202][HNOI2005]狡猾的商人 试题描述 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i= ...

  2. bzoj 1202: [HNOI2005]狡猾的商人 并查集好题

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2946  Solved: 1384[Submit][Sta ...

  3. BZOJ 1202: [HNOI2005]狡猾的商人( 差分约束 )

    好像很多人用并查集写的... 前缀和, 则 sumt - sums-1 = v, 拆成2条 : sumt ≤ sums-1 + v, sums-1 ≤ sumt - v 就是一个差分约束, 建图跑SP ...

  4. 1202: [HNOI2005]狡猾的商人

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1554  Solved: 745[Submit][Stat ...

  5. [HNOI2005]狡猾的商人 ,神奇做法——贪心

    洛谷P2294 [HNOI2005]狡猾的商人 ,神奇做法--贪心 看到大牛都是写的差分约束或带权并查集,本蒟蒻都不太会(还是用差分约束过了的QAQ),但是想出一种贪心的策略,运用神奇的优先队列实现. ...

  6. [luogu P2294] [HNOI2005]狡猾的商人

    [luogu P2294] [HNOI2005]狡猾的商人 题目描述 输入输出格式 输入格式: 从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据, ...

  7. BZOJ1202 [HNOI2005]狡猾的商人 【并查集】

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4180  Solved: 2015 [Submit][S ...

  8. bzoj 1201[HNOI2005]数三角形 1202 [HNOI2005]狡猾的商人 暴力 权值并查集

    [HNOI2005]数三角形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 349  Solved: 234[Submit][Status][Disc ...

  9. 洛谷P2294 [HNOI2005]狡猾的商人

    P2294 [HNOI2005]狡猾的商人 题目描述 输入输出格式 输入格式: 从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要 ...

  10. BZOJ1202 [HNOI2005]狡猾的商人 并查集维护前缀和

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1935  Solved: 936[Submit][Stat ...

随机推荐

  1. 通过运行一个tomcat容器来记录下初学docker常用的几个命令---容器篇

    1.查看容器列表 显示正在运行的容器: [root@localhost HMK]# docker ps 显示所有容器,包括未运行的: [root@localhost HMK]# docker ps - ...

  2. [福大软工] W班 软件产品案例分析

    作业要求 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/1300 评分细则 第一部分 调研,评测 (3 ...

  3. c语言一,二数组

    一.PTA实验作业 题目1:7-4 简化的插入排序 1. 本题PTA提交列表 2. 设计思路 1.定义整形变量N,temp,i. 2.输入N 3.通过for(i=1;i<=N;i++)的循环语句 ...

  4. 利用python实现简单随机验证码

    #!/usr/bin/env python # -*- coding:utf-8 -*- import random temp ='' for i in range(6): num = random. ...

  5. decltype操作符

    关于decltype操作符的说明: 1.在C++中,decltype作为操作符,用于查询表达式的数据类型.decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些 ...

  6. Java中Math类的常用方法

    public class MathDemo { public static void main(String args[]){ /** * abs求绝对值 */ System.out.println( ...

  7. php后台的在控制器中就可以实现阅读数增加

    $smodel=M('Sswz');$smodel->where($map)->setInc('view' ,1);php后台的在控制器中就可以实现阅读数增加前台不需要传值

  8. OAuth是什么?

    一.OAuth的概念 1.问题的提出 2.应用场景 3.规范演进 二.OAuth的运行原理 1.参与者 访问私有数据需要用户参与(客户.用户.服务提供者) 访问公共数据不需要用户参与(客户.服务提供者 ...

  9. PHP7链接MySQL

    1 <?php $mysqli = new mysqli("localhost", "root", "123"); if($mysql ...

  10. Trensient的使用介绍

    1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...