zoukankan      html  css  js  c++  java
  • BZOJ 1202 HNOI2005 狡猾的商人

    1202: [HNOI2005]狡猾的商人

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

    建图后跑最长路即可

    #include <bits/stdc++.h>
    using namespace std;
    inline int read(){
        int x=0;int f=1;char ch=getchar();
        while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
        while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int MAXN=1e6+10;
    namespace zhangenming{
        int w,n,m,len,linkk[MAXN],dis[MAXN];
        bool flag;
        struct node{
            int y,v,x;
        }e[MAXN];
        inline void insert(int xx,int yy,int vv){
            e[++len].y=yy;
            e[len].v=vv;
            e[len].x=xx;
        }
        bool bellman_ford(){
            memset(dis,10,sizeof(dis));
            for(int i=1;i<n;i++){
                flag=1;
                for(int j=1;j<=len;j++){
                    if(dis[e[j].y]>dis[e[j].x]+e[j].v){
                        dis[e[j].y]=dis[e[j].x]+e[j].v;
                        flag=0;
                    }
                }
                if(flag) break;
            }       
            for(int i=1;i<=len;i++){
                if(dis[e[i].y]>dis[e[i].x]+e[i].v) return 0;
            }
            return 1;
        }
        void init(){
            w=read();
            while(w--){
                n=read();m=read();len=0;
                for(int i=1;i<=m;i++){
                    int xx=read()-1;
                    int yy=read();
                    int vv=read();
                    insert(xx,yy,-vv);
                    insert(yy,xx,vv);
                }
                if(bellman_ford())cout<<"true"<<endl;
                else cout<<"false"<<endl;
            }
        }
    }
    int main(){
        using namespace zhangenming;
        init();
        return 0;
    }
    

      

  • 相关阅读:
    Restful接口传入多参数
    map转换成JSON的3种方式
    项目打包后执行start.sh提示“no such file or directory”解决办法,linux中给文件增加权限
    如何将一个a表a1字段与b表b1字段的笛卡尔积插入到e表中
    get、set方法的取代注释之lombok插件
    推荐 33 个 IDEA 最牛配置转(Java技术栈)
    mysql-----group by 对多个字段进行分组
    mysql获取某段时间内每一天的统计数据
    发票流水号生成方式
    postman之post请求传参
  • 原文地址:https://www.cnblogs.com/something-for-nothing/p/7787573.html
Copyright © 2011-2022 走看看