hdu 3038 How Many Answers Are Wrong(并查集)
2014-05-05 20:52
399 查看
题目大意:
给出m个询问,问【l,r】之间的和 ,求出有多少次询问不和之前的矛盾的。
思路分析:
用并查集记录当前节点到根节点的和。
给出m个询问,问【l,r】之间的和 ,求出有多少次询问不和之前的矛盾的。
思路分析:
用并查集记录当前节点到根节点的和。
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #define maxn 222222 using namespace std; int set[maxn]; int sum[maxn]; int find(int x) { if(x!=set[x]) { int f=set[x]; set[x]=find(set[x]); sum[x]+=sum[f]; } return set[x]; } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<=n;i++)set[i]=i,sum[i]=0; int ans=0; while(m--) { int l,r,s; scanf("%d%d%d",&l,&r,&s); l--; int xx=find(l); int yy=find(r); if(xx==yy) { if(sum[l]-sum[r]!=s)ans++; } else { set[xx]=yy; sum[xx]=sum[r]-sum[l]+s; } } printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU-3038 How Many Answers Are Wrong 并查集
- HDU 3038 How Many Answers Are Wrong 带权并查集
- HDU 3038 How Many Answers Are Wrong(带权并查集)
- hdu-3038-How Many Answers Are Wrong-带权并查集
- hdu 3038 How Many Answers Are Wrong(带权并查集)
- HDU 3038 How Many Answers Are Wrong(维护节点间关系的并查集)
- HDU 3038 How Many Answers Are Wrong (并查集)(需复习!)
- HDU 3038 How Many Answers Are Wrong(带权并查集)
- 【HDU 3038】 How Many Answers Are Wrong (带权并查集)
- HDU 3038 How Many Answers Are Wrong(带权并查集)
- hdu 3038 How Many Answers Are Wrong(带权并查集)
- HDU 3038 How Many Answers Are Wrong(并查集)
- HDU 3038 How Many Answers Are Wrong(并查集)
- 【HDU 3038 How Many Answers Are Wrong】+ 并查集
- hdu 3038 How Many Answers Are Wrong (带权并查集入门)
- hdu 3038 How Many Answers Are Wrong(带权并查集)
- HDU - 3038 How Many Answers Are Wrong(并查集)
- hdu 3038 How Many Answers Are Wrong(带权并查集+树的性质)
- HDU 3038 how many answers are wrong(带权并查集)
- HDU 3038 How Many Answers Are Wrong (并查集)