1202: [HNOI2005]狡猾的商人

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

 

[Submit][Status][Discuss]

HOME Back

题解:对于给的i,j,w,我们可以假设sum[i]为前i天的和;则sum[j]-sum[i-1]==w; ==>sum[j]-sum[i-1]<=w&&sum[i-1]-sum[j]<=-w;

如果能够找到从起点到其他点的最短距离,则为真;如果有环的话说明存在矛盾的地方使其距离可以一直减小;

注意:并不是任意两点都可以到达,故分几个图寻找;

参考代码:

 #include<bits/stdc++.h>
using namespace std;
#define clr(a,val) memset(a,val,sizeof a)
#define lowbit(x) x&-x
#define PI acos(-1.0)
typedef long long ll;
const int INF=0x3f3f3f3f;
int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>'') {if(ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
const int maxn=;
int T,n,m,x,y,z,tot,cnt[maxn];
int head[maxn],dis[maxn],vis[maxn];
struct Edge{
int v,w,nxt;
} edge[maxn<<]; void Init()
{
tot=; clr(head,-);
clr(cnt,);
} void addedge(int u,int v,int w)
{
edge[tot].v=v;
edge[tot].w=w;
edge[tot].nxt=head[u];
head[u]=tot++;
} bool SPFA(int s)
{
queue<int> q;
clr(dis,INF);clr(vis,);
dis[s]=; vis[s]=;
q.push(s);
while(!q.empty())
{
int u=q.front(); q.pop(); vis[u]=;
for(int i=head[u];~i;i=edge[i].nxt)
{
int v=edge[i].v;
if(dis[v]>dis[u]+edge[i].w)
{
dis[v]=dis[u]+edge[i].w;
if(!vis[v])
{
q.push(v);vis[v]=;
if(++cnt[v]>n) return false;
}
}
}
}
return true;
} int main()
{
T=read();
while(T--)
{
Init();
n=read();m=read();
for(int i=;i<=m;++i)
{
x=read();y=read();z=read();
addedge(x-,y,z);addedge(y,x-,-z);
}
bool flag=true;
for(int i=;i<=n;++i)
{
if(cnt[i]) continue;
if(!SPFA(i)) {flag=false; break;}
}
if(flag) puts("true");
else puts("false");
}
return ;
}

BZOJ[HNOI2005]狡猾的商人(差分约束)的更多相关文章

  1. BZOJ 1202: [HNOI2005]狡猾的商人( 差分约束 )

    好像很多人用并查集写的... 前缀和, 则 sumt - sums-1 = v, 拆成2条 : sumt ≤ sums-1 + v, sums-1 ≤ sumt - v 就是一个差分约束, 建图跑SP ...

  2. luogu 2294 [HNOI2005]狡猾的商人 差分约束

    一个差分约束模型,只需判一下有没有负环即可. #include <bits/stdc++.h> #define N 103 #define M 2004 #define setIO(s) ...

  3. LUOGU P2294 [HNOI2005]狡猾的商人(差分约束)

    [传送门] (https://www.luogu.org/problemnew/show/P2294) 解题思路 差分约束.先总结一下差分约束,差分约束就是解决一堆不等式混在一起,左边是差的形式,右边 ...

  4. BZOJ 1202 狡猾的商人 差分约束or带权并查集

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1202 题目大意: 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的 ...

  5. bzoj1202: [HNOI2005]狡猾的商人(并查集 差分约束)

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4127  Solved: 1981[Submit][Sta ...

  6. bzoj1202: [HNOI2005]狡猾的商人(差分约束)

    1202: [HNOI2005]狡猾的商人 题目:传送门 题解: 据说是带权并查集!蒟蒻不会啊!!! 可是听说lxj大佬用差分约束A了,于是开始一通乱搞. 设s[i]为前i个月的总收益,那么很容易就可 ...

  7. P2294 [HNOI2005]狡猾的商人(差分约束)

    P2294 [HNOI2005]狡猾的商人 对于每个$(x,y,w)$,连边$(x-1,y,w),(y,x-1,-w)$,表示前$y$个月的收益比前$x-1$个月的收益大$w$ 这样题目就转化为询问图 ...

  8. bzoj 1202: [HNOI2005]狡猾的商人 并查集好题

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2946  Solved: 1384[Submit][Sta ...

  9. bzoj 1201[HNOI2005]数三角形 1202 [HNOI2005]狡猾的商人 暴力 权值并查集

    [HNOI2005]数三角形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 349  Solved: 234[Submit][Status][Disc ...

随机推荐

  1. 简单的私有DockerHub搭建

    Docker Hub 目前Docker官方维护了一个公共仓库https://hub.docker.com, 其中已经包括100000+个的镜像.大部分需求都可以通过在 Docker hub中直接下载镜 ...

  2. BST的实现(二叉搜索树)

    void Inorder(struct Tree *T); //中序 void Preorder(struct Tree *T); //前序 void Postorder(struct Tree *T ...

  3. [ISE调试] 在ISE调试过程中,遇到过的error以及消除办法

    1.Incompatible IOB's are locked to the same bank 15,具体如右图, 于是去查引脚配置,发现 也就是说,在bank=15的这组IO里面,我既选了LVAM ...

  4. sparkContext初始化机制

    sparkContext初始化机制 要点: 1.TaskSchedular如何注册,application.Excutor 如何反向注册 TaskScheduleImpl 即 TaskSchedula ...

  5. Python文件写入时的编码问题解决

    如下代码: import sys import os import django root_dir = os.path.join(os.path.dirname(os.path.abspath(__f ...

  6. suseoj 1208: 排列问题 (STL, next_permutation(A.begin(), A.end()))

    1208: 排列问题 时间限制: 1 Sec  内存限制: 128 MB提交: 2  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 全排列的生成就是对于给定的字符集或 ...

  7. nyoj 60-谁获得了最高奖学金 (逻辑判断)

    60-谁获得了最高奖学金 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:8 submit:17 题目描述:     某校的惯例是在每学期的期末考试之 ...

  8. nyoj 975-关于521 (EOF)

    975-关于521 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:46 难度:2 题目描述: Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去. 浏览 ...

  9. pandas的使用(5)

    pandas的使用(5)-- 缺失值的处理

  10. Extjs导入Excel文件之后grid自动刷新显示刚插入的数据

    var winUpload = new Ext.Window({ title: '导入excel文件', width: 400, height:200, listeners: { close: fun ...