1202: [HNOI2005]狡猾的商人

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 4180  Solved: 2015
[Submit][Status][Discuss]

Description

刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的。账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), 。当 Ai大于0时表示这个月盈利Ai 元,当 Ai小于0时表示这个月亏损Ai 元。所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和。 刁姹的任务是秘密进行的,为了调查商人的账本,她只好跑到商人那里打工。她趁商人不在时去偷看账本,可是她无法将账本偷出来,每次偷看账本时她都只能看某段时间内账本上记录的收入情况,并且她只能记住这段时间内的总收入。 现在,刁姹总共偷看了m次账本,当然也就记住了m段时间内的总收入,你的任务是根据记住的这些信息来判断账本是不是假的。

Input

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

Output

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

Sample Input

2
3 3
1 2 10
1 3 -5
3 3 -15
5 3
1 5 100
3 5 50
1 2 51

Sample Output

true
false

我图形思维还是太弱了QAQ

短短并查集查了那么久

由题,只有当我们直接或间接得到两个相同的区间信息不同时为false

按照前缀和的思想,区间和[a,b] = z可以写成s[b] - s[a - 1] = z

这样子我们就转化为了两个点之间的关系,每当我们得出两点的关系时,我们将它们所在集合合并

两点关系确定,当且仅当两点在同一并查集中

我们再维护每一点到所在并查集根节点的距离表示s[a] - s[root]

这样当我们需要b - a的时,只需将d[b] - d[a]

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define fo(i,x,y) for (int i = (x); i <= (y); i++)
#define Redge(u) for (int k = head[u]; k != -1; k = edge[k].next)
using namespace std;
const int maxn = 105,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1;char c = getchar();while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57) {out = out * 10 + c - 48; c = getchar();}return out * flag;
}
int pre[maxn],d[maxn],n,m;
inline int find(int u){if (u == pre[u]) return u;int fa = find(pre[u]);d[u] += d[pre[u]];pre[u] = fa;return fa;
}
void init(){n = read(); m = read();for (int i = 0; i <= n; i++) pre[i] = i,d[i] = 0;
}
int main()
{int T = read(),a,b,fa,fb,z;bool flag;while (T--){init(); flag = true;while (m--){a = read() - 1; b = read(); z = read(); fa = find(a); fb = find(b);if (fa != fb){d[fa] = d[b] - d[a] - z;pre[fa] = fb;}else if (d[b] - d[a] != z) flag = false;}if (flag) printf("true\n");else printf("false\n");}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8282808.html

BZOJ1202 [HNOI2005]狡猾的商人 【并查集】相关推荐

  1. bzoj1202[HNOI2005]狡猾的商人

    bzoj1202[HNOI2005]狡猾的商人 题意: 账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai .所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和.给出m段时间内的总 ...

  2. bzoj1202 狡猾的商人[并查集]

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2932 Solved: 1382 [Submit][Sta ...

  3. BZOJ1202 [HNOI2005]狡猾的商人(洛谷P2294)

    带权并查集 BZOJ题目传送门 洛谷题目传送门 之前做过几乎一样的题目(这里),然而忘光了 记wiwiw_i表示根节点到iii这段时间的盈利,当x" role="presentat ...

  4. bzoj1202 [HNOI2005]狡猾的商人

    https://www.lydsy.com/JudgeOnline/problem.php?id=1202 带权并查集维护前缀和 s,t,v相当于sum[t]-sum[s-1]=v,那么对于一个连通块 ...

  5. BZOJ1202: [HNOI2005]狡猾的商人

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...

  6. P2294 [HNOI2005]狡猾的商人(带权并查集+前缀和)

    P2294 [HNOI2005]狡猾的商人 解题思路:这里用带权并查集记录每个节点与自己祖先的距离.如果两个点没有相同的祖先,那么需要把这两个集合合并起来,用已经的点确定p点到q的距离,num[p] ...

  7. bzoj 1202: [HNOI2005]狡猾的商人(带权并查集)

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

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

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

  9. [luogu2294] [HNOI2005]狡猾的商人

    ##链接## [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4027 Solved: 1940 [Submit][St ...

最新文章

  1. Java中return结束循环,Java中break、continue、return在for循环中的使用
  2. sql网站路径php,如何在源码中找出sql语句的位置呢
  3. [转]轻松掌握Ajax.net系列教程十六:使用DropDownExtender
  4. python FTP服务器实现(Python3)
  5. 跨浏览器开发:CSS代码的金科玉律
  6. 使用identity+jwt保护你的webapi(三)——refresh token
  7. 操作系统复习笔记 02-03 OS Structure 操作系统结构
  8. 一致吗 驱动_iPhone 12无线充电真的香吗?
  9. 前端学习(2607):vue指令
  10. 06 - Object-C ARC机制
  11. 马云终于露面了!发表千字演讲
  12. Python中random模块生成随机数详解
  13. jQuery选择器的的优点
  14. loadrunner11录制无法打开IE浏览器
  15. 计算机病毒分析流程图,电脑病毒分析-熊猫烧香病毒分析.pdf
  16. VS2008 调试windows服务项目
  17. 计算机组成及工作原理课件,计算机组成与工作原理电子教案课件.ppt
  18. oracle wmsys.wm_concat ORA-00932: 数据类型不一致: 应为 -, 但却获得 CLOB
  19. 今年-计划写一本java方面的书籍-初稿正式完成
  20. 用TEXT函数解决日期用连接字符日期变成数字格式的问题

热门文章

  1. Linux命令 iperf - 网络性能测试工具
  2. 反浏览器指纹追踪(反浏览器指纹追踪技术)
  3. android的log.d不显示结果
  4. linux 中的source命令
  5. 下一代微服务!ServiceMesh的2018年度总结 | 万字雄文
  6. 拿什么来衡量程序员的生产力?
  7. 从零开始的 React 组件开发之路 (一):表格篇
  8. 磁盘调度算法寻道问题
  9. 图解 Hibernate,session.close(),session.clear()区别
  10. Address already in use: JVM_Bind 端口被占用解决办法