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

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

 

【题目链接】 

 

【题目大意】

  给出一些区间和的数值,问是否存在矛盾

 

【题解】

  用并查集维护前缀和之间的距离,每个节点保存到根节点的数值差,

  如果保存的数值差的差与前缀和之差不相等,则矛盾

 

【代码】

#include 
#include
using namespace std;const int N=110;int n,m,f[N],d[N];int sf(int x){ if(f[x]==x)return x; int fx=f[x]; f[x]=sf(f[x]); d[x]+=d[fx]; return f[x];}const int M=1010;int T;int st[M],en[M],cost[M];bool check(){ for(int i=1;i<=m;i++){ int x=st[i]-1,y=en[i]; int fx=sf(x),fy=sf(y); if(fx!=fy){ f[fx]=fy; d[fx]=cost[i]-d[x]+d[y]; }else{ //printf("%d %d %d\n",d[y],d[x],cost[i]); if(d[x]-d[y]!=cost[i])return 0; } }return 1;}int main(){ scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); for(int i=0;i<=n;i++)f[i]=i,d[i]=0; for(int i=1;i<=m;i++)scanf("%d%d%d",&st[i],&en[i],&cost[i]); if(check())puts("true"); else puts("false"); }return 0;}

转载于:https://www.cnblogs.com/forever97/p/bzoj1202.html

你可能感兴趣的文章
awk工具-解析1
查看>>
推荐一款可以直接下载浏览器sources资源的Chrome插件
查看>>
CRM product UI里assignment block的显示隐藏逻辑
查看>>
AMH V4.5 – 基于AMH4.2的第三方开发版
查看>>
Web.Config文件配置之配置Session变量的生命周期
查看>>
mysql导入source注意点
查看>>
linux下编译安装nginx
查看>>
ArcScene 高程不同的表面无法叠加
查看>>
[ONTAK2010] Peaks
查看>>
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>
javascript中sort()排序方法总结
查看>>
实现聊天界面的代码
查看>>
自己生成一个NDK的浅析
查看>>
Excel数据导入到数据库
查看>>
jQuery最佳实践
查看>>
SELinux FAQ
查看>>
Java中synchronized同步的理解
查看>>