hdu 3038 How Many Answers Are Wrong(并查集的思想利用)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038

题意:就是给出n个数和依次m个问题,每个问题都是一个区间的和,然后问你这些问题中有几个有问题,有问题的直接忽略。

每个问题给出a~b之间的和为s,其实就是val(b)-val(a-1)的值为s,这样就容易想到用向量的方法来求解



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
const int M = 2e5 + 10;
int n , m , f[M] , root[M];
void init() {
    for(int i = 0 ; i <= n ; i++) {
        f[i] = i , root[i] = 0;
    }
}
int find(int x) {
    if(x == f[x])
        return x;
    int tmp = find(f[x]);
    root[x] += root[f[x]];
    return f[x] = tmp;
}
int main() {
    int a , b , s;
    while(scanf("%d%d" , &n , &m) != EOF) {
        init();
        int count = 0;
        for(int i = 1 ; i <= m ; i++) {
            scanf("%d%d%d" , &a , &b , &s);
            a--;
            int x = find(a) , y = find(b);
            if(x == y) {
                if(root[b] - root[a] != s)
                    count++;
            }
            else {
                f[x] = y;
                root[x] = root[b] - root[a] - s;
            }
        }
        printf("%d\n" , count);
    }
    return 0;
}
posted @   Gealo  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
点击右上角即可分享
微信分享提示