zoukankan      html  css  js  c++  java
  • BZOJ-1202: [HNOI2005]狡猾的商人 (并查集+前缀和)

    1202: [HNOI2005]狡猾的商人

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 4106  Solved: 1974
    [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

    HINT

     

    Source

    用前缀和维护一下就行了

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 typedef long long LL;
     4 const int MAX=105;
     5 int n,m,t;
     6 int fa[MAX],v[MAX];
     7 int getfather(int x){
     8     if (fa[x]==x) return x;
     9     int t=getfather(fa[x]);
    10     v[x]+=v[fa[x]];
    11     return fa[x]=t;
    12 }
    13 int main(){
    14     freopen ("bussiness.in","r",stdin);freopen ("bussiness.out","w",stdout);
    15     int i,j,l,r,w;
    16     scanf("%d",&t);
    17     while (t--){
    18         scanf("%d%d",&n,&m);
    19         bool flag=true;
    20         for (i=0;i<=n;i++) fa[i]=i;
    21         memset(v,0,sizeof(v));
    22         for (i=1;i<=m;i++){
    23             scanf("%d%d%d",&l,&r,&w);l--;
    24             if (flag){
    25                 int tx=getfather(l),ty=getfather(r);
    26                 if (tx==ty){
    27                     if (v[r]-v[l]!=w) flag=false;}
    28                 else
    29                     v[ty]=v[l]-v[r]+w,fa[ty]=tx;
    30             }
    31         }
    32         if (flag) puts("true");
    33         else puts("false");
    34     }
    35     return 0;
    36 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7769271.html
Copyright © 2011-2022 走看看