题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1202

题意:

  有一个账本,记录了n个月的盈亏。

  每个月的数值:正为盈,负为亏。

  你知道m个这个账本的区间和[x[i],y[i]]。

  问你这个账本是真是假。

题解:

  如果已知区间和[a,b],[b,c],那么就可以算出区间和[a,c]。

  而唯一判断账本真假的方法,就是看有没有某个给定的区间和A[a,c]与推出来的区间和B[a,c]不相等。如果不相等,账本为假。

  我们常用前缀和来处理区间和。

  但此题仅给出点与点之间的差值,因此要用并查集维护:

    某一连通块内各节点到根节点的差值dis[i]。

    如果两点a,b在同一连通块内,则区间和为dis[b] - dis[a-1]。

  根节点dis = 0.

  每次要用到某个dis[x]时,要在之前执行一遍find(x),以更新x的真正父亲,也顺便将dis[x]改为了它与真父亲的差值。

  让px认py作爹时,要更新dis[px] = px到py的差值 = dis[y]-w-dis[x].

  特别要注意前缀和方向:

    “从根到节点的前缀和方向”与“认爹箭头方向”相反。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 105 using namespace std; int n,m,t;
int dis[MAX_N];
int par[MAX_N];
bool flag; void init_union_find()
{
memset(dis,,sizeof(dis));
for(int i=;i<=n;i++)
{
par[i]=i;
}
} int find(int x)
{
if(par[x]==x) return x;
int t=find(par[x]);
dis[x]+=dis[par[x]];
return par[x]=t;
} void unite(int x,int y,int w)
{
int px=find(x);
int py=find(y);
if(px==py) return;
dis[px]=dis[y]-w-dis[x];
par[px]=py;
} bool same(int x,int y)
{
return find(x)==find(y);
} void work()
{
cin>>n>>m;
int x,y,w;
flag=true;
init_union_find();
for(int i=;i<m;i++)
{
cin>>x>>y>>w;
if(same(x-,y))
{
if(dis[y]-dis[x-]!=w)
{
flag=false;
return;
}
}
else unite(x-,y,w);
}
} void print()
{
if(flag) cout<<"true"<<endl;
else cout<<"false"<<endl;
} int main()
{
cin>>t;
while(t--)
{
work();
print();
}
}

BZOJ 1202 [HNOI2005]狡猾的商人:并查集(维护距离)的更多相关文章

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

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

  2. BZOJ1202 [HNOI2005]狡猾的商人 并查集维护前缀和

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1935  Solved: 936[Submit][Stat ...

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

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

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

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

  5. BZOJ 1202 [HNOI2005]狡猾的商人(并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1202 [题目大意] 给出一些区间和的数值,问是否存在矛盾 [题解] 用并查集维护前缀和 ...

  6. BZOJ 1202: [HNOI2005]狡猾的商人 [带权并查集]

    题意: 给出m个区间和,询问是否有区间和和之前给出的矛盾 NOIp之前做过hdu3038..... 带权并查集维护到根的权值和,向左合并 #include <iostream> #incl ...

  7. BZOJ——1202: [HNOI2005]狡猾的商人

    http://www.lydsy.com/JudgeOnline/problem.php?id=1202 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: ...

  8. bzoj 1202: [HNOI2005]狡猾的商人

    我居然用暴力跑过去了... 思路:两个区间合成一个新的区间才会产生冲突, 我们用并查集维护前缀和, 0 - n 个节点分别表示sum[ 0 ] - sum[ n ], d[ i ] 表示 前缀i 和它 ...

  9. B1202 [HNOI2005]狡猾的商人 并查集

    其实就是并查集的题.维护一个前缀和,然后用并查集维护前缀和,每次判断是否合理就行了. 题干: Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了 ...

随机推荐

  1. 微信小程序 - 考试状态不同显示

    未开考 .已交卷. 考试中 .考试结束 #ddd      #f00     #ff0    默认禁用色 禁用的button仅有style起作用,四个状态,通过wx:if ... elif ... e ...

  2. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第15章节--开发SP2013工作流应用程序

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第15章节--开发SP2013工作流应用程序         本章节你将学到: SP中工作流的新功能: 理解工作流管理服务 ...

  3. falsh,.swf文件修改z-index

    <object style="z-index:-1;"> <param name="wmode" value="transparen ...

  4. VirtualBox 笔记

    VirtualBox 笔记p=111" target="_blank"> http://www.youi5.com/?p=111 VirtualBox 虚拟机,由I ...

  5. Android---63---Android中的动画效果

    Android中有四种动画效果: AlphaAnimation:透明度动画效果 ScaleAnimation:缩放动画效果 TranslateAnimation:位移动画效果 RotateAnimat ...

  6. Flash威胁的不不过浏览器

    Adobe为提升Flash的安全性.在最新版本号的Flash(18.0.0.209)增加了很多攻击缓解技术. 新的攻击缓解技术为: l  <*>长度验证–添加长度cookie到Vector ...

  7. linux crontab 定时任务解析

    -----------crontab定时任务---------------------- 检查crontab工具是否安装 crontab -l 检查crontab服务是否启动 service cron ...

  8. JavaMelody tomcat应用监控

    1 下载相关jar包,maven地址 测试发现 1.57.0版本tomcat6工程登陆报错,改用版本 1.50.0是正常的 <dependency> <groupId>net. ...

  9. 【Unity 3D】学习笔记三十:游戏元素——游戏地形

    游戏地形 在游戏的世界中,必然会有非常多丰富多彩的游戏元素融合当中. 它们种类繁多.作用也不大同样.一般对于游戏元素可分为两种:经经常使用.不经经常使用.经常使用的元素是游戏中比較重要的元素.一般须要 ...

  10. lnmp建站常识

    1.nginx配置网站目录并修改访问的端口:nginx.conf文件 listen 666;//端口默认为80,修改后增强安全性 server_name www.lnmp.org; index ind ...