首页 > 其他 > 详细

[2016-03-16][HDU][3038][How Many Answers Are Wrong]

时间:2016-03-17 01:49:28      阅读:239      评论:0      收藏:0      [点我收藏+]
  • 时间:2016-03-16 16:12:28 星期三

  • 题目编号:[2016-03-16][HDU][3038][How Many Answers Are Wrong]

  • 题目大意:

  • 给定n个数字,给出若干个区间的和,问这些和有多少个是错误的,如果未知,那么就默认是对的,如果前面已知,就判断是否正确

  • 分析:求出那些数据是已经给出的,已经给出的就可以求

  • 方法:并查集更新已经出现的区间,集合内的元素为区间内的点,父节点表示区间的左端点,权值表示到父节点到当前点这段区间元素的和

  • 解题过程遇到问题:多组数据!!!!

  1. #include <vector>
  2. #include <list>
  3. #include <map>
  4. #include <set>
  5. #include <deque>
  6. #include <queue>
  7. #include <stack>
  8. #include <bitset>
  9. #include <algorithm>
  10. #include <functional>
  11. #include <numeric>
  12. #include <utility>
  13. #include <sstream>
  14. #include <iostream>
  15. #include <iomanip>
  16. #include <cstdio>
  17. #include <cmath>
  18. #include <cstdlib>
  19. #include <cctype>
  20. #include <string>
  21. #include <cstring>
  22. #include <cstdio>
  23. #include <cmath>
  24. #include <cstdlib>
  25. #include <ctime>
  26. using namespace std;
  27. typedef long long LL;
  28. #define CLR(x,y) memset((x),(y),sizeof((x)))
  29. #define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x))
  30. #define FORD(x,y,z) for(int (x)=(y);(x)>=(z);--(x))
  31. const int maxn = 200000 + 100;
  32. int fa[maxn],sum[maxn];
  33. void ini(int n){
  34. CLR(sum,0);
  35. for(int i = 0; i <= n;++i){
  36. fa[i] = i;
  37. }
  38. }
  39. int fnd(int x){
  40. if(x == fa[x]) return x;
  41. int fax = fa[x];
  42. fa[x] = fnd(fa[x]);
  43. sum[x] += sum[fax];
  44. return fa[x];
  45. }
  46. int main(){
  47. //freopen("in.txt","r",stdin);
  48. //freopen("out.txt","w",stdout);
  49. int n,m;
  50. while(~scanf("%d%d",&n,&m)){
  51. int u,v,tsum,ans = 0;
  52. ini(n);
  53. FOR(i,0,m){
  54. scanf("%d%d%d",&u,&v,&tsum);
  55. int t1,t2;
  56. --u;
  57. t1 = fnd(u);
  58. t2 = fnd(v);
  59. if(t1 == t2){
  60. ans += (sum[v] - sum[u] != tsum);
  61. }else {
  62. fa[t2] = t1;
  63. sum[t2] = tsum + sum[u] - sum[v];
  64. }
  65. }
  66. printf("%d\n",ans);
  67. }
  68. return 0;
  69. }




[2016-03-16][HDU][3038][How Many Answers Are Wrong]

原文:http://www.cnblogs.com/qhy285571052/p/c9c558c3de1a578d373cecd26c441d27.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!