加权并查集

由于给出信息的是一些一个区间的和为多少,我们显然并不好处理出每一个点应该为多少,这我们根本做不到

但是我们想一下,如果要求一个区间\([l,r]\)的和,那么我们是不是可以利用前缀和\(p[r]-p[l-1]\)得到

所以一组信息\(l,r,k\)其实可以利用前缀和写成\(p[r]-p[l-1]=k\)的形式

于是我们可以考虑将这些这前缀和的信息利用并查集来合并,同时我们还要存储一个\(s[i]\)表示\(p[fa[i]]-p[i]\)为多少,即根节点与每个点的差为多少

如果对于一条信息\(l,r,k\),\(l-1,r\)已经有了关系,即\(l-1\)和\(r\)在一个并查集里,我们就看一看\(p[r]-p[l-1]\)即\(p[root]-p[l-1]-(p[root]-p[r])=s[x-1]-s[y]\)是否等于\(k\)就好了

如果\(l-1\)与\(r\)没有关系,那么就将这两个并查集合并一下,这里也要推一下式子(刚上来这里的式子推错了,真尴尬)

之后就是一个加权并查集的板子了

#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define maxn 101
int fa[maxn],s[maxn];
inline int read()
{
char c=getchar();
int x=0,r=1;
while(c<'0'||c>'9'){if(c=='-') r=-1;c=getchar();}
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x*r;
}
int find(int x)
{
if(fa[x]==x) return x;
int an=find(fa[x]);
s[x]+=s[fa[x]];
return fa[x]=an;
}
int n,m,T;
int main()
{
T=read();
while(T--)
{
n=read();
m=read();
for(re int i=0;i<=n;i++) fa[i]=i,s[i]=0;
int opt=1;
int x,y,z;
for(re int i=1;i<=m;i++)
{
x=read();
y=read();
z=read();
int xx=find(x-1);
int yy=find(y);
if(xx==yy)
{
if(s[x-1]-s[y]!=z) opt=0;
}
else
{
if(!opt) break;
fa[xx]=yy;
s[xx]=-s[x-1]+s[y]+z;
}
if(!opt) break;
}
if(!opt) puts("false");
else puts("true");
}
return 0;
}

【[HNOI2005]狡猾的商人】的更多相关文章

  1. [BZOJ1202][HNOI2005]狡猾的商人

    [BZOJ1202][HNOI2005]狡猾的商人 试题描述 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i= ...

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

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

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

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

  4. 1202: [HNOI2005]狡猾的商人

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

  5. [HNOI2005]狡猾的商人 ,神奇做法——贪心

    洛谷P2294 [HNOI2005]狡猾的商人 ,神奇做法--贪心 看到大牛都是写的差分约束或带权并查集,本蒟蒻都不太会(还是用差分约束过了的QAQ),但是想出一种贪心的策略,运用神奇的优先队列实现. ...

  6. [luogu P2294] [HNOI2005]狡猾的商人

    [luogu P2294] [HNOI2005]狡猾的商人 题目描述 输入输出格式 输入格式: 从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据, ...

  7. BZOJ1202 [HNOI2005]狡猾的商人 【并查集】

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4180  Solved: 2015 [Submit][S ...

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

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

  9. 洛谷P2294 [HNOI2005]狡猾的商人

    P2294 [HNOI2005]狡猾的商人 题目描述 输入输出格式 输入格式: 从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要 ...

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

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

随机推荐

  1. C#操作Redis List 列表

    /// <summary> /// Redis 列表 /// </summary> public static void Redis_List() { RedisClient ...

  2. tomcat 修改 编码

    <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" ...

  3. 有意思的MySQL之最

    写在前面 在平时工作中特别是架构设计阶段,咨询量最多的也就是MySQL之最了,在不经意间发现原来MySQL手册里面已经列举了,顺手拿来翻译下,如果有翻译错误或者不当的地方,欢迎批评指正. 最大和最小 ...

  4. [转]Entity Framework Refresh context?

    本文转自:http://stackoverflow.com/questions/20270599/entity-framework-refresh-context If you want to rel ...

  5. 解决Openwrt安装插件提示一下错误的办法

    解决Openwrt安装插件提示一下错误的办法 Openwrt安装17ce插件,提示一下错误: Collected errors: * check_data_file_clashes: Package ...

  6. 运行tomcat7w.exe,提示:指定的服务未安装unable to open the service tomcat7

    这是服务没安装,到tomcat的bin目录下运行 service.bat install 即可

  7. csharp: using using System.Web.Script.Serialization read json

    using System; using System.Data; using System.Configuration; using System.Collections; using System. ...

  8. Scarpy+selenium 结合使用

    首先要先在spider对象实例化时,同时实例化一个浏览器对象 # -*- coding: utf-8 -*- import scrapy from selenium import webdriver ...

  9. jquery解析XML在IE7下不兼容的问题

    jquery在解析XML内容的时候在IE7下无法显示,是因为数据格式的问题,解决办法如下: $.ajax({        type:"POST",        url:&quo ...

  10. css模仿百度首页

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...