博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1202: [HNOI2005]狡猾的商人 [带权并查集]
阅读量:5240 次
发布时间:2019-06-14

本文共 1199 字,大约阅读时间需要 3 分钟。

题意:

给出m个区间和,询问是否有区间和和之前给出的矛盾


 

NOIp之前做过hdu3038.....

带权并查集维护到根的权值和,向左合并

 

#include 
#include
#include
#include
using namespace std;const int N=1e6+5;typedef long long ll;inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}int n, m, l, r, v;int fa[N], val[N];int find(int x) { if(x == fa[x]) return x; int root = find(fa[x]); val[x] += val[fa[x]]; return fa[x] = root;}int main() { freopen("in", "r", stdin); int T=read(); while(T--) { n=read()+1; m=read(); for(int i=1; i<=n; i++) fa[i]=i, val[i]=0; int flag=1; for(int i=1; i<=m; i++) { l=read(); r=read()+1; v=read(); if(!flag) continue; int x = find(l), y = find(r); //printf("hi %d %d %d %d %d %d\n", l,r,x,y,val[l],val[r]); if(x == y) { if(val[r] - val[l] != v) flag = 0; } else fa[y] = x, val[y] = v - val[r] + val[l]; } puts(flag ? "true" : "false"); }}

 

转载于:https://www.cnblogs.com/candy99/p/6595410.html

你可能感兴趣的文章
.net 文本框只允许输入XX,(正则表达式)
查看>>
实验2-2
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
IOS Google语音识别更新啦!!!
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
BootScrap
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>
selenium学习中遇到的问题
查看>>
[Linux]PHP-FPM与NGINX的两种通讯方式
查看>>
Java实现二分查找
查看>>
架构图-模型
查看>>
黑马程序员_Java基础枚举类型
查看>>
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
django ORM创建数据库方法
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
口胡:[HNOI2011]数学作业
查看>>