#1515 : 分数调查

分析

带权并查集。

如果把每个人抽象成一个点,之间的关系抽象成边。那么如果询问的两个人之间存在关系,说明,他们在图上上是联通的。所以并查集维护一下连通性。 对于分数之间的关系,用到带权并查集。

每个点里存一个val表示当前点的分数-根节点的分数。

查询: xy不连通,输出-1, 否则val[x]=fen[x]-fen[u],val[y]=fen[y]-fen[u],输出fen[x]-fen[y]=val[x]-val[y]

合并: x的根节点为u,y的根节点为v,fa[u]=v; 更新后的val[u]=fen[u]-fen[v],

由 val[x]=fen[x]-fen[u],得 fen[u]=fen[x]-val[x]

由 val[y]=fen[y]-fen[v],得 fen[v]=fen[y]-val[y]

所以 fen[u]-fen[v] = fen[x] - fen[y] + val[y] - val[x] = S + val[y] - val[x]

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for (;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
int fa[N],val[N]; int find(int x) {
if (x == fa[x]) return x;
int tmp = find(fa[x]);
val[x] += val[fa[x]];
fa[x] = tmp;
return fa[x];
}
int main() {
int n = read(), m = read(), k = read();
for (int i=; i<=n; ++i)
fa[i] = i, val[i] = ;
for (int i=; i<=m; ++i) {
int x = read(),y = read(),S = read();
int u = find(x),v = find(y);
if (u != v) {
fa[u] = v;
val[u] = val[y] - val[x] + S;
}
}
while (k--) {
int x = read(),y = read();
if (find(x) != find(y)) puts("-1");
else {
printf("%d\n",val[x]-val[y]);
}
}
return ;
}

Hihocoder #1515 : 分数调查的更多相关文章

  1. hihocoder 1515 分数调查(树形dp)

    hihocoder 1515 分数调查 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. ...

  2. hihoCoder 1515 分数调查(带权并查集)

    http://hihocoder.com/problemset/problem/1515 题意: 思路: 带权并查集的简单题,计算的时候利用向量法则即可. #include<iostream&g ...

  3. hiho 1515 : 分数调查 简单bfs

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测验的成绩,所以小Hi只能得 ...

  4. [Offer收割]编程练习赛15 B.分数调查[加权并查集]

    #1515 : 分数调查 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测 ...

  5. 分数调查 HihoCoder - 1515

    小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测验的成绩,所以小Hi只能得到一些小道消息,例如X号同学的分数比Y号同学的分数高S分. 小Hi想知道利用这 ...

  6. 【[Offer收割]编程练习赛15 B】分数调查

    [题目链接]:http://hihocoder.com/problemset/problem/1515 [题意] [题解] 带权并查集 relation[x]表示父亲节点比当前节点大多少; 对于输入的 ...

  7. CQ18阶梯赛第二场

    H国的身份证号码I HihoCoder - 1558 只要单纯的判断一下前后的乘积就好了, 因为不是很想处理倍数的关系, 所以我这里是用 string去处理. 代码: #include<bits ...

  8. hihoCoder #1199 : Tower Defense Game ——(树型dp)

    题目链接:https://hihocoder.com/problemset/problem/1199. 题意:一棵以1为根的树,每个点有一个p值和q值,到这个点需要当前分数大于等于p,然后消耗掉(p- ...

  9. nyist 240 小明的调查统计(二)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=240 小明的调查统计(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 ...

随机推荐

  1. onload方法注意点

    function initPage() { console.log("浏览器审查元素选择日志可查看!"); } window.onload = initPage; 这里要注意,一定 ...

  2. JSON解析问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/quanqinayng/article/details/25121955 这是data.chatFil ...

  3. PHP------析构方法

    析 构 方 法 封装,有一个叫构造函数 和构造函数对应的还有一种方法叫做析构. class ren    //一个类 是 人类 { public $mingzi ://成员变量 punction__d ...

  4. 理解JavaScript的this对象

    1.概述 this对象是在运行时基于函数的执行环境绑定的,this总是返回一个对象,简单说,就是返回属性或方法"当前"所在的对象.在全局函数中,this等于window,而当函数作 ...

  5. WEB测试—用户界面测试

    如果有设计稿,当然按照设计稿进行测试:没有设计稿,就参考原型:如果都没有,就按照web大众排版设计要求测试了,当然,还是要产品看过为准. 一下简单总结一下测试的点. 1. 导航测试 很少有用户愿意花时 ...

  6. 面试准备——(二)专业知识(1)Linux

    面试的问题: 腾讯: 1. 查看进程的命令 美团: 1. 常用的命令——美团/滴滴 2. 如何在性能测试的时候查看进程 3. kill -9/-15区别 滴滴: 1.如何找到一个特定文件 2. 如何替 ...

  7. fastTime格式化时间

    { field: 'alarmTime', title: '告警时间', align: 'center', width: 90, valign: 'middle', formatter:functio ...

  8. torch.backend.cudnn.benchmark

    大部分情况下,设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题. 一般来讲,应该遵循以下准则: 如果网络的输入数据维度 ...

  9. 【题解】UVA10298 Power String(KMP)

    UVA10298:https://www.luogu.org/problemnew/show/UVA10298 思路 设P[x]数组为 前x个字符的最大前缀长度等于后缀字串 由P数组的定义我们可以知道 ...

  10. Java中的IO流(四)

    上一篇<Java中的IO流(三)>把IO流中的文件及目录操作的对象File类记录了一下,本篇把本不属性IO流但又和IO流有关系的一个对象作一下记录,此对象本属于集合框架里的一个子集,即Pr ...