HDU-3038 How Many Answers Are Wrong
2016-07-12 14:52
316 查看
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66964#problem/D
题目大意:给你M个区间和,问你有几个是与前面矛盾的。
解题思路:这个题乍一看可能要线段树或树状数组,其实没有必要,区间和可以理解为前缀和相减。每个节点记录前缀和,对每个询问先判断两个节点是否连通,这便是带权并查集干的事了,若联通则权值相减看是否为给定值,若不为则矛盾;若不联通则两棵树合并为一棵(注意有顺序)同时计算出新的子节点的权值。
本题还需注意:题上没说有多组数据但我没用while(scanf()!=EOF)就是wa,看了别人的才知道多组,在这提醒一下。
代码:#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int maxn=200005;
int fa[maxn],val[maxn];
int n,m;
int find(int x){
if(fa[x]==x) return x;
else{
int root=find(fa[x]);
val[x]+=val[fa[x]];
return fa[x]=root;
}
}
int ans;
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=1;i<=n;i++) {
fa[i]=i;val[i]=0;
}
ans=0;
for(int i=1;i<=m;i++){
int ai,bi,si;
scanf("%d%d%d",&ai,&bi,&si);
ai--;
int r1=find(ai);
int r2=find(bi);
if(r1!=r2){
fa[r2]=r1;
val[r2]=val[ai]+si-val[bi];
}
else if(val[bi]-val[ai]!=si) ans++;
}
cout<<ans<<endl;
}
return 0;
}
题目大意:给你M个区间和,问你有几个是与前面矛盾的。
解题思路:这个题乍一看可能要线段树或树状数组,其实没有必要,区间和可以理解为前缀和相减。每个节点记录前缀和,对每个询问先判断两个节点是否连通,这便是带权并查集干的事了,若联通则权值相减看是否为给定值,若不为则矛盾;若不联通则两棵树合并为一棵(注意有顺序)同时计算出新的子节点的权值。
本题还需注意:题上没说有多组数据但我没用while(scanf()!=EOF)就是wa,看了别人的才知道多组,在这提醒一下。
代码:#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int maxn=200005;
int fa[maxn],val[maxn];
int n,m;
int find(int x){
if(fa[x]==x) return x;
else{
int root=find(fa[x]);
val[x]+=val[fa[x]];
return fa[x]=root;
}
}
int ans;
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=1;i<=n;i++) {
fa[i]=i;val[i]=0;
}
ans=0;
for(int i=1;i<=m;i++){
int ai,bi,si;
scanf("%d%d%d",&ai,&bi,&si);
ai--;
int r1=find(ai);
int r2=find(bi);
if(r1!=r2){
fa[r2]=r1;
val[r2]=val[ai]+si-val[bi];
}
else if(val[bi]-val[ai]!=si) ans++;
}
cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- Xcode配置SVN详细步骤及使用
- redis 数据类型及操作
- 关于Web应用中的绝对路径编写问题
- 前端面试大全
- CCCC/GPLT L2-010 排座位
- ReactNative学习资源整合
- WebView使用详解(一)——Native与JS相互调用(附JadX反编译)
- 剑指offer44--树中结点的最低公共结点
- 【SpringMVC框架】小结+视图解析器配置前缀和后缀
- Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP
- Android 通过Jni调用Native
- Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP
- Python使用xlwt模块 操作Excel文件
- js生成json数据
- HDU 2481 Toy(Polya综合)
- Counting Sort
- hdu 5203(枚举)
- git 远程版本库,github提供服务原理,git自动更新发送邮件
- 《Android源码设计模式》之面向对象的六大原则
- mysql用户权限设置