zoukankan      html  css  js  c++  java
  • 1202: [HNOI2005]狡猾的商人

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 4792  Solved: 2376
    [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
     
    第一次写带权并查集
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 int w;
     7 int f[105],sum[105];
     8 bool flag;
     9 
    10 int find(int x)
    11 {
    12     if(f[x]==x) return x;
    13     int root=find(f[x]);
    14     sum[x]+=sum[f[x]];
    15     return f[x]=root;
    16 }
    17 
    18 int main()
    19 {
    20     scanf("%d",&w);
    21     while(w--)
    22     {
    23         int n,m;
    24         scanf("%d%d",&n,&m);
    25         memset(sum,0,sizeof(sum));
    26         flag=0;
    27         for(int i=0;i<=n;i++) f[i]=i;
    28         for(int i=1;i<=m;i++)
    29         {
    30             int x,y,z;
    31             scanf("%d%d%d",&x,&y,&z);
    32             x--;
    33             int u=find(x),v=find(y);
    34             if(u!=v)
    35             {
    36                 f[v]=u;
    37                 sum[v]=sum[x]-sum[y]+z;
    38             }else if(sum[y]-sum[x]!=z) flag=1;
    39         }
    40     if(flag) printf("false
    ");
    41     else printf("true
    ");
    42     }
    43     return 0;
    44 }

    以后来补一个差分约束

  • 相关阅读:
    bzoj3653: 谈笑风生
    bzoj1858: [Scoi2010]序列操作
    bzoj1857: [Scoi2010]传送带
    bzoj1856: [Scoi2010]字符串
    bzoj1855: [Scoi2010]股票交易
    bzoj1854: [Scoi2010]游戏
    bzoj1853: [Scoi2010]幸运数字
    斜堆,非旋转treap,替罪羊树
    NOI2003 文本编辑器
    A_star poj2449 k短路
  • 原文地址:https://www.cnblogs.com/InWILL/p/9690999.html
Copyright © 2011-2022 走看看