【BZOJ5188】 [Usaco2018 Jan]MooTube
BZOJ5188 [Usaco2018 Jan]MooTube
突然发现BZOJ没有题目,放题面.
题意翻译
题面描述
在业余时间,Farmer John创建了一个新的视频共享服务,他将其命名为MooTube。在MooTube上,Farmer John的奶牛可以录制,分享和发现许多有趣的视频。他的奶牛已经发布了 N个视频 ( $1 \leq N \leq 100,000 \(),为了方便将其编号为\) 1 \ldots N $。然而,FJ无法弄清楚如何帮助他的奶牛找到他们可能喜欢的新视频。
FJ希望为每个MooTube视频创建一个“推荐视频”列表。这样,奶牛将被推荐与他们已经观看过的视频最相关的视频。
FJ设计了一个“相关性”度量标准,顾名思义,它确定了两个视频相互之间的相关性。他选择$ N-1$ 对视频并手动计算其之间的相关性。然后,FJ将他的视频建成一棵树,其中每个视频是节点,并且他手动将$ N-1 $对视频连接。为了方便,FJ选择了 \(N-1\)对,这样任意视频都可以通过一条连通路径到达任意其他视频。 FJ决定将任意一对视频的相关性定义为沿此路径的任何连接的最小相关性。
Farmer John想要选择一个 \(K\) 值,以便在任何给定的MooTube视频旁边,推荐所有其他与该视频至少有 \(K\) 相关的视频。然而,FJ担心会向他的奶牛推荐太多的视频,这可能会分散他们对产奶的注意力!因此,他想设定适当的 \(K\) 值。 Farmer John希望得到您的帮助,回答有关 \(K\)值的推荐视频的一些问题。
输入
第一行输入包含 \(N\) 和 \(Q\) ( \(1 \leq Q \leq 100,000\) )。 接下来的 \(N-1\) 行描述了FJ手动比较的一对视频。 每行包括三个整数 \(p_i\) , \(q_i\) 和 \(r_i\) ( \(1 \leq p_i, q_i \leq N\), \(1 \leq r_i \leq 1,000,000,000\)),表示视频 \(p_i\)和\(q_i\)已连接并且相关性为\(r_i\)。 接下来的 \(Q\) 行描述了Farmer John的第 \(Q\) 个问题。 每行包含两个整数, \(k_i\)和\(v_i\) ($ 1 \leq k_i \leq 1,000,000,000$,\(1 \leq v_i \leq N\)),表示FJ的第 \(i\) 个问题询问中当 \(K = k_i\) 时,第 \(v_i\) 个视频推荐列表中将推荐的视频数。
输出
输出 \(Q\) 行。 在第 \(i\) 行,输出FJ的第 \(i\) 个问题的答案。
Solution
看到题目没有思绪?
发现如果大的可以行,小的一定可以?(这个很显然)
那么接着考虑如果把询问和边全部排序,就可以并查集记录一下\(siz\)然后很方便的求解不是吗?
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi()
{
int f=1,sum=0;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
return f*sum;
}
int n,Q;
struct node{
int u,v,w;
bool operator<(const node b)const{
return w>b.w;
}
}e[100010];
int f[100010],siz[100010],ans[100010];
int find(int x){
if(x!=f[x])f[x]=find(f[x]);
return f[x];
}
struct Query{
int k,v,id;
bool operator<(const Query b)const{
return k>b.k;
}
}ques[100010];
int main()
{
n=gi();Q=gi();
for(int i=1;i<n;i++)e[i].u=gi(),e[i].v=gi(),e[i].w=gi();
for(int i=1;i<=Q;i++)ques[i].k=gi(),ques[i].v=gi(),ques[i].id=i;
sort(e+1,e+n);sort(ques+1,ques+Q+1);
int id=1;
for(int i=1;i<=n;i++)f[i]=i,siz[i]=1;
for(int i=1;i<=Q;i++){
while(id<n && e[id].w>=ques[i].k){
int u=e[id].u,v=e[id].v;id++;
if(find(u)==find(v))continue;
u=find(u);v=find(v);
f[v]=u;siz[u]+=siz[v];
}
ans[ques[i].id]=siz[find(ques[i].v)]-1;
}
for(int i=1;i<=Q;i++)printf("%d\n",ans[i]);
return 0;
}
【BZOJ5188】 [Usaco2018 Jan]MooTube的更多相关文章
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- 【BZOJ1720】[Usaco2006 Jan]Corral the Cows 奶牛围栏 双指针法
[BZOJ1720][Usaco2006 Jan]Corral the Cows 奶牛围栏 Description Farmer John wishes to build a corral for h ...
- 【BZOJ1594】[Usaco2008 Jan]猜数游戏 二分答案+并查集
[BZOJ1594][Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在 ...
- 【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集
[BZOJ1576][Usaco2009 Jan]安全路经Travel Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, ...
- 【BZOJ2199】[Usaco2011 Jan]奶牛议会 2-SAT
[BZOJ2199][Usaco2011 Jan]奶牛议会 Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要 ...
- BZOJ5188: [Usaco2018 Jan]MooTube 并查集+离线处理
BZOJ又不给题面... Luogu的翻译看不下去... 题意简述 有一个$n$个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你$Q$个询问,问你与点$v$的距离超过$k ...
- Bzoj5188/洛谷P4185 [Usaco2018 Jan]MooTube(并查集)
题面 Bzoj 洛谷 题解 最暴力的方法是直接判两个点之间的路径最小值是否\(\geq k\),用\(Dijkstra\)可以做到该算法最快效率,但是空间复杂度始终是\(O(n^2)\)的,会\(ML ...
- 【bzoj1596】[Usaco2008 Jan]电话网络
题目描述 Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无线电通讯塔,来 ...
- 【BZOJ1677】[Usaco2005 Jan]Sumsets 求和 递推
... #include <iostream> using namespace std; ]; int n,i; int main() { cin>>n; f[]=; ;i&l ...
随机推荐
- Ubuntu服务器如何搭建PPTPD(原创保证可用)
Ubuntu是一款基于linux的操作系统,无需许可和订购的费用,Ubuntu Server可以帮助您高效地扩展您的数据中心.它精简的架构和自动化部署的能力让您只需花费更少的运算能力和资源,便可提供更 ...
- Java学习笔记:知识总结
概述 1991年由sun公司开发的名称为Oak的语言,1994年更名为Java. JDK:Java Development Kit,Java的开发和运行环境,Java的开发工具和JRE. JRE:Ja ...
- Struct配置
这里只是写到配置方法: 第一步:LoginAction: package com.inspur.actions; import javax.servlet.http.HttpServletReques ...
- 41.App 框架的搭建思路以及代码的规范
本链接 引用别人文章https://www.jianshu.com/p/d553096914ff
- 鲍姆-韦尔奇算法求解HMM参数
1. HMM模型参数求解概述 HMM模型参数求解根据已知的条件可以分为两种情况. 第一种情况较为简单,就是我们已知DD个长度为TT的观测序列和对应的隐藏状态序列,即{(O1,I1),(O2,I2),. ...
- 2018.11.30 spoj220 Relevant Phrases of Annihilation(后缀数组+二分答案)
传送门 代码: 先用特殊字符把所有字符串连接在一起. 然后二分答案将sasasa数组分组. 讨论是否存在一个组满足组内对于每一个字符串都存在两段不相交字串满足条件. #include<bits/ ...
- 安装docker跨主机网络flannel
一.实验环境 机器 操作系统 安装服务 172.16.4.36 centos7 docker etcd flannel 172.16.4.37 centos7 docker etcd flanne ( ...
- w7 目录
第17章 期中架构体系介绍 期中架构环境准备 01-期中架构内容简介 02-期中架构大酒楼详解 03-期中架构使用到的软件简介 04-期中架构运维角度观察与使用的软件 05-重头开始创建一台新的虚拟机 ...
- 点击文字弹出一个DIV层窗口代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- 详细解读 :java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed,Java报错之Connection is read-only.
问题分析: 实际开发项目中,进行insert的时候,产生这个问题是Spring框架的一个安全权限保护方法,对于方法调用的事物保护,一般配置如下: <!-- 事务管理 属性 --> < ...