HDU 3038 How Many Answers Are Wrong(并查集)
2012-10-18 17:44
357 查看
转载请注明出处,谢谢/article/2566293.html
by---cxlove
题目:给出一些询问,[l,r]的和为s,问有多少个是错的
http://acm.hdu.edu.cn/showproblem.php?pid=3038
我们考虑sum[i]表示i与根节点之间节点的和
也就是sum[i]=sigma(aj) (pre[i]=>j>=i)
另外需要注意的是sum[r]-sum[l-1]表示的是闭区间[l,r]的和
最近好水啊~~~
by---cxlove
题目:给出一些询问,[l,r]的和为s,问有多少个是错的
http://acm.hdu.edu.cn/showproblem.php?pid=3038
我们考虑sum[i]表示i与根节点之间节点的和
也就是sum[i]=sigma(aj) (pre[i]=>j>=i)
另外需要注意的是sum[r]-sum[l-1]表示的是闭区间[l,r]的和
最近好水啊~~~
#include<iostream> #include<cstdio> #include<map> #include<cstring> #include<cmath> #include<vector> #include<algorithm> #include<set> #include<string> #include<queue> #define inf 1<<30 #define M 60005 #define N 10005 #define maxn 300005 #define eps 1e-10 #define zero(a) fabs(a)<eps #define Min(a,b) ((a)<(b)?(a):(b)) #define Max(a,b) ((a)>(b)?(a):(b)) #define pb(a) push_back(a) #define mem(a,b) memset(a,b,sizeof(a)) #define LL long long #define lson step<<1 #define rson step<<1|1 #define MOD 1000000009 #define sqr(a) ((a)*(a)) using namespace std; int n,m; int pre[200005]; int sum[200005]; int find(int x) { if(x!=pre[x]) { int f=pre[x]; pre[x]=find(pre[x]); sum[x]+=sum[f]; } return pre[x]; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<=n;i++) pre[i]=i,sum[i]=0; int ans=0; while(m--) { int l,r,s; scanf("%d%d%d",&l,&r,&s); l--; int ra=find(l),rb=find(r); if(ra==rb) { if(sum[l]-sum[r]!=s) ans++; } else { pre[ra]=rb; sum[ra]=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(并查集)
- 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(带权的并查集,其实俺真不知道为啥带权,俺只知道多了个父子关系)
- D - How Many Answers Are Wrong HDU - 3038 【关系并查集】