码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-05-23 07:19:00      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   c   code   java   

题目

以前的 一道题。

题意:n个数,m条信息,每条信息是 从a到b的和,为s,判断有多少条信息错误,

如果发现一条信息错误,就去掉这条信息,然后再往下看。 注意这些值可能有负的。

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 const int maxn = 200000+10;
 7 int bin[maxn], dist[maxn], ans;
 8 
 9 int find(int x)
10 {
11     if(x==bin[x]) return x;
12     int tmp = bin[x];
13     bin[x] = find(bin[x]);
14     dist[x] += dist[tmp];
15     return bin[x];
16 }
17 void merge(int x, int y, int s)
18 {
19     int fx = find(x);
20     int fy = find(y);
21     if(fx == fy)
22     {
23         if(dist[y] != dist[x] + s)
24             ans++;
25     }
26     else
27     {
28         bin[fy] = fx;
29         dist[fy] = dist[x] - dist[y] + s;
30     }
31 }
32 int main()
33 {
34     int n, m, i, a, b, s;
35     while(~scanf("%d%d", &n, &m))
36     {
37         ans = 0;
38         for(i = 1; i <= n; i++)
39         {
40             bin[i] = i;
41             dist[i] = 0;
42         }
43         while(m--)
44         {
45             scanf("%d%d%d", &a, &b, &s);
46             a--;  //注意
47             merge(a, b, s);
48         }
49         printf("%d\n", ans);
50     }
51     return 0;
52 }
bubuko.com,布布扣

 

 

hdu 3038 How Many Answers Are Wrong (带权并查集),布布扣,bubuko.com

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

标签:style   class   blog   c   code   java   

原文地址:http://www.cnblogs.com/bfshm/p/3741662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!