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; } |
分类:
并查集
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 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 构建精确任务处理应用