杭电hdu 3038 how many answers are wrong 并查集求解

原创 2012年03月23日 10:57:44

http://acm.hdu.edu.cn/showproblem.php?pid=3038

经过网上的搜罗,基本上明白了这个题的意思,网站http://hi.baidu.com/fp_lv/blog/item/a471530a86df7b90d53f7c2c.html讲解的很清楚,我这里只记录下网址和我的代码,以便以后随时查看。

#include <stdio.h>
#define MAX 200001

int father[MAX];
int sum[MAX];//存储从1到i相加的结果

int n,m;
int ai, bi, si;

void init()
{
	for(int i = 0; i <= n; i ++){
		father[i] = i;
		sum[i] = 0;
	}
}

int getfather(int x)
{
	if(x == father[x])
		return x;
	int now = getfather(father[x]);//
	sum[x] += sum[father[x]];//需要我研究的地方
	father[x] = now;
	return now;
}

bool join(int a, int b)
{
	int fa = getfather(a);
	int fb = getfather(b);
	if(fa == fb)return false;
	father[fb] = fa;
	sum[fb] = sum[a] - sum[b] + si;//
	return true;
}

int main()
{
//	freopen("input.txt","r",stdin);
//	freopen("output.txt","w",stdout);
	
	while(~scanf("%d%d",&n,&m)){
		init();
		int ans = 0;
		while(m--){
			scanf("%d%d%d",&ai, &bi, &si);
			ai --;
			if(!join(ai, bi)&&sum[bi] - sum[ai] != si)ans ++;
		}
		printf("%d\n", ans);
	}
	return 0;
}


hdu3038How Many Answers Are Wrong(并查集)

题意:给出一些区间[l,r]的和为S,问有多少个是矛盾的 思路:对给出的区间[l,r]将左边减一变成(l-1,r]合并,把数值小的当做根节点更新即可,有一点不懂的是只会用递归来更新,用while循环...
  • qq_21057881
  • qq_21057881
  • 2016年01月31日 09:50
  • 417

How Many Answers Are Wrong(并查集)

How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (...
  • qq_32823673
  • qq_32823673
  • 2017年04月11日 14:19
  • 145

How Many Answers Are Wrong 并查集

题意为前两个数之间的和为第三个数,这个题我们可以这么考虑,比如a 到 b之间和为 s,那么 s = (开始到b之间的和) - (开始到a-1之间的和),ab的根相等 那么它们在一个集合里 那么s即为它...
  • tydfhihfhgjkj
  • tydfhihfhgjkj
  • 2015年09月14日 22:43
  • 123

HDU 3038 How Many Answers Are Wrong(并查集)

题目链接:[kuangbin带你飞]专题五 并查集 D - How Many Answers Are Wrong题意 有n次询问,给出a到b区间的总和,问这n次给出的总和中有几次是和前面已近给出的...
  • to_be_better
  • to_be_better
  • 2016年03月29日 20:59
  • 1182

HDU 3038 How Many Answers Are Wrong (并查集)

题目大意:有n次询问,给出a到b区间的总和,问这n次给出的总和中有几次是和前面已近给出的是矛盾的?? Problem Description TT and FF are ... frien...
  • h1021456873
  • h1021456873
  • 2015年07月29日 10:57
  • 168

HDU - 3038 How Many Answers Are Wrong(并查集)

题目链接  : http://acm.hdu.edu.cn/showproblem.php?pid=3038 题意:给你n,m,代表有1-n的数,给你m条信息,每条信息有3个数,代表一列数的起点,终...
  • LLL_yx
  • LLL_yx
  • 2017年08月16日 19:03
  • 91

【HDU 3038 How Many Answers Are Wrong】+ 并查集

How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J...
  • WYK1823376647
  • WYK1823376647
  • 2017年01月19日 22:13
  • 208

HDU 3038 How Many Answers Are Wrong - 并查集

坦白讲,这题如果不是放到并查集这一讲的话,我根本不会想到用的。 有前几题的经验,本题就非常简单了:find(t)表示t所在集合的左端点,sum[t]表示t到find(t)这一区间的区间和。为了方便,...
  • Prairial_0
  • Prairial_0
  • 2012年10月31日 00:38
  • 256

[HDU 3038]How Many Answers Are Wrong[并查集]

题目链接:[HDU 3038]How Many Answers Are Wrong[并查集] 题意分析: 给出区间值的和,问这些话中有多少个是和之前矛盾的。 解题思路: 用一个dis数组记录点到根节点...
  • CatGlory
  • CatGlory
  • 2015年09月11日 17:25
  • 519

hdu 3038 How Many Answers Are Wrong(并查集)

题目大意: 给出m个询问,问【l,r】之间的和   ,求出有多少次询问不和之前的矛盾的。 思路分析: 用并查集记录当前节点到根节点的和。 #include #include #incl...
  • u010709592
  • u010709592
  • 2014年05月05日 20:52
  • 733
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:杭电hdu 3038 how many answers are wrong 并查集求解
举报原因:
原因补充:

(最多只允许输入30个字)