1202: [HNOI2005]狡猾的商人
1202: [HNOI2005]狡猾的商人
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1554 Solved: 745
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
HINT
Source
题解:这个题乍一看我直接蒙了,完全没辙。直到我看了下题解,结果居然是个前缀和+并查集——细细想来,这道题出现冲突的前提必然是对于同一个区间(无论是直接给的还是间接推出来的),出现了两个不同的区间和。于是假如把每个月看成图的一个点,则意味着这张图里面两个点之间的所有路径均必须相等,则并查集这时候就会被用于找环啦——其实只要在并查集基本的getfat(找父亲点,详见百度百科——并查集)里面再加入一些维护操作即可,这样子前缀和以及重复边的相容性判断就手到擒来啦*^_^*么么哒(HansBug:多多卖萌有利于身心健康么么哒~ phile:。。。。。。)
1 var
2 i,j,k,l,m,n,x,y,z,vx,vi:longint;
3 c,a:array[0..10000] of longint;
4 flag:boolean;
5 function getfat(k:longint):longint;
6 var a1:longint;
7 begin
8 if k=c[k] then exit(k);
9 a1:=getfat(c[k]);
10 inc(a[k],a[c[k]]);
11 c[k]:=a1;
12 exit(c[k]);
13 end;
14 procedure doit(x,y,z:longint);
15 var a1,a2,a3,a4,a5,a6:longint;
16 begin
17 a1:=getfat(x);a2:=getfat(y);
18 a3:=a[x];a4:=a[y];
19 if a1<>a2 then
20 begin
21 c[a1]:=a2;
22 a[a1]:=a4-a3-z;
23 end
24 else if (a4-a3)<>z then flag:=false;
25 end;
26 begin
27 readln(vx);
28 for vi:=1 to vx do
29 begin
30
31 fillchar(c,sizeof(c),0);
32 fillchar(a,sizeof(a),0);
33 readln(n,m);
34 for i:=0 to n do c[i]:=i;
35 flag:=true;
36 for i:=1 to m do
37 begin
38 readln(x,y,z);
39 doit(x-1,y,z);
40 end;
41 if flag then writeln('true') else writeln('false');
42
43 end;
44 end.
45
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP ajax+jQuery 实现批量删除功能实例代码小结
- python对execl 处理操作代码
- Python手动或自动协程操作方法解析
- 什么是python的自省
- python Socket网络编程实现C/S模式和P2P
- keras 多任务多loss实例
- 什么是python的必选参数
- python进程与线程小结实例分析
- PHP集成环境XAMPP的安装与配置
- Python socket服务常用操作代码实例
- Python select及selectors模块概念用法详解
- keras使用Sequence类调用大规模数据集进行训练的实现
- python的json包位置及用法总结
- 如何优雅的使用 laravel 的 validator验证方法
- phpMyAdmin通过密码漏洞留后门文件