HDU 3038 How Many Answers Are Wrong(带权并查集)
2017-11-08 20:48
507 查看
http://acm.hdu.edu.cn/showproblem.php?pid=3038
题意:
给出一个区间1~n,有多次询问,每次回答[l,r]这个区间内的数值和,问在这几次询问中有多少次回答是错误的。
思路:
如果[l,r]之间的和为sum,这也就是说r-(l-1)=sum。那么用个数组val[x]维护x到其父亲结点的差值。
题意:
给出一个区间1~n,有多次询问,每次回答[l,r]这个区间内的数值和,问在这几次询问中有多少次回答是错误的。
思路:
如果[l,r]之间的和为sum,这也就是说r-(l-1)=sum。那么用个数组val[x]维护x到其父亲结点的差值。
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vector> #include<stack> #include<queue> #include<cmath> #include<map> #include<set> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int INF = 0x3f3f3f3f; const int maxn = 200000+5; int n, m; int p[maxn], val[maxn]; int finds(int x) { if(p[x]==x) return x; int tmp=p[x]; p[x]=finds(p[x]); val[x]+=val[tmp]; return p[x]; } int main() { //freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&m)) { int ans = 0; memset(val,0,sizeof(val)); for(int i=0;i<=n;i++) p[i]=i; while(m--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); a--; int x = finds(a); int y = finds(b); if(x != y) { p[x] = y; val[x] = val[b] - val[a] + c; } else { if(abs(val[b]-val[a])!=c) ans++; } } 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 带权并查集
- D - How Many Answers Are Wrong HDU - 3038(带权并查集)
- kuangbin专题五: D - How Many Answers Are Wrong HDU - 3038 (带权并查集)
- 并查集【路径迭代】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 3038D - How Many Answers Are Wrong [kuangbin带你飞]专题五 并查集
- HDU 3038 How Many Answers Are Wrong - 并查集