题意:
给出区间[1,n],下面有m组数据,l r v区间[l,r]之和为v,每输入一组数据,判断此组条件是否与前面冲突 ,最后输出与前面冲突的数据的个数.
比如 [1 5]区间和为100 然后后面给出区间[1,2]的和为 200 那肯定就是有问题的了。
思路:这是一道带权并查集的模板题,你如果想要ac这道题你需要点的前置技能点是:最基本的向量加减,还有就是看我之后写的一篇讲解博客就好了,考完离散之后我会写。。(如果你等不及了可以问szt大佬,或者ZSC大佬或者sei都可以好吧)
#include<stdio.h>
#include<string.h>
int n,m;
int p[200003],sum[200003];
void init()
{
for(int i=0;i<=n;i++)
{
p[i]=i;
sum[i]=0;
}
}
int getf(int v)
{
if(p[v]!=v)
{
int t=p[v];
p[v]=getf(t);
sum[v]+=sum[t];
}
return p[v];
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
int a,b,c,ans=0;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
a--;
int da=getf(a);
int db=getf(b);
if(da==db)
{
if(sum[a]-sum[b]!=c) ans++;
}
else
{
p[da]=db;
sum[da]=sum[b]-sum[a]+c;
}
}
printf("%d\n",ans);
}
}