[BZOJ1202][HNOI2005]狡猾的商人(并查集+前缀和)
来源:互联网 发布:淘宝联盟发送朋友圈 编辑:程序博客网 时间:2024/06/05 20:31
题目描述
传送门
题解
刚开始感觉只有几个区间和另外几个区间都拼成了同一个区间的时候才有可能判false,然后xjblg写出了一个对拍都不过的code然后交上去A了= =可见数据之弱。
网上的正解是并查集,YY了挺久的。
读入区间(l,r,w),如果l和r不在一个集合里,将它们合并;否则判断dis_r-dis_l是否等于w(其中dis_i表示i到它祖先的距离)
代码
xjblg
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int max_n=105;const int max_m=1005;int T,n,m;bool flag,vis[max_n][max_n];int f[max_n][max_n];struct hp{int x,y,w;}edge[max_m];inline void clear(){ memset(vis,0,sizeof(vis)); memset(f,0,sizeof(f));}inline int cmp(hp a,hp b){ return a.x<b.x||(a.x==b.x&&a.y<b.y);}int main(){ scanf("%d",&T); while (T--) { clear(); scanf("%d%d",&n,&m); for (int i=1;i<=m;++i) scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].w); sort(edge+1,edge+m+1,cmp); flag=true; for (int i=1;i<=m;++i) { if (!vis[edge[i].x][edge[i].y]) { vis[edge[i].x][edge[i].y]=true; f[edge[i].x][edge[i].y]=edge[i].w; } else if (f[edge[i].x][edge[i].y]!=edge[i].w) { flag=false; break; } for (int j=edge[i].x-1;j>=1;--j) { if (vis[j][edge[i].x-1]) { if (!vis[j][edge[i].y]) { vis[j][edge[i].y]=true; f[j][edge[i].y]=f[j][edge[i].x-1]+f[edge[i].x][edge[i].y]; } else if (f[j][edge[i].y]!=f[j][edge[i].x-1]+f[edge[i].x][edge[i].y]) { flag=false; break; } } } if (!flag) break; } if (flag) printf("true\n"); else printf("false\n"); }}
并查集+前缀和
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int max_n=105;int T,n,m,l,r,w,fl,fr;bool flag;int f[max_n],dis[max_n];inline int find(int x){ if (x!=f[x]) { int t=find(f[x]); dis[x]+=dis[f[x]]; f[x]=t; } return f[x];}int main(){ scanf("%d",&T); while (T--) { scanf("%d%d",&n,&m); for (int i=0;i<=n;++i) f[i]=i,dis[i]=0; flag=true; for (int i=1;i<=m;++i) { scanf("%d%d%d",&l,&r,&w); l--; fl=find(l); fr=find(r); if (fl!=fr) { dis[fr]=dis[l]-dis[r]+w; f[fr]=fl; } else if (dis[r]-dis[l]!=w) flag=false; } if (flag) printf("true\n"); else printf("false\n"); }}
0 0
- [BZOJ1202][HNOI2005]狡猾的商人(并查集+前缀和)
- BZOJ1202 [HNOI2005]狡猾的商人(并查集)
- [BZOJ1202][HNOI2005][并查集]狡猾的商人
- 【BZOJ1202】【HNOI2005】狡猾的商人 并查集
- 【bzoj1202】 HNOI2005狡猾的商人 并查集
- BZOJ1202: [HNOI2005]狡猾的商人 并查集
- [bzoj1202][HNOI2005]狡猾的商人[并查集]
- bzoj1202 [HNOI2005]狡猾的商人 (带权并查集)
- BZOJ1202 [HNOI2005]狡猾的商人 【并查集】
- [HNOI2005]狡猾的商人(并查集维护前缀和)
- bzoj1202: [HNOI2005]狡猾的商人(带权并查集)
- bzoj 1202: [HNOI2005]狡猾的商人(并查集+前缀和)
- [BZOJ 1202][HNOI2005]狡猾的商人(并查集+前缀和)
- bzoj1202 狡猾的商人[并查集]
- [bzoj1202][并查集]狡猾的商人
- [BZOJ1202]HNOI2005 狡猾的商人|并查集|差分约束
- 差分约束/并查集——BZOJ1202/Luogu2294 [HNOI2005]狡猾的商人
- 【带权并查集】BZOJ1202(HNOI2005)[狡猾的商人]题解
- NEU1694: Primorial vs LCM
- 学习Fragment
- windows JDK 版本切换
- python random 生成随机数
- 遍历Map的四种方法
- [BZOJ1202][HNOI2005]狡猾的商人(并查集+前缀和)
- html5图形的保存与huif
- 链表
- HTML5 用localStorage写的留言本
- js实现继承的6种方式 寄生继承没弄懂
- cocos2d-x 通过JNI实现c++和Android的java层函数互调
- Django+OpenShift微信公众号开发(一)
- 面试之路(29)-TCP流量控制和拥塞控制-滑动窗口协议详解
- prim算法 最小生成树MST