DTOJ #4492. 「USACO 2018 Jan」MooTube

【题目描述】

在业余时间,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$ 个问题的答案。

【样例】

样例输入
4 3
1 2 3
2 3 2
2 4 4
1 2
4 1
3 1
样例输出
3
0
2

【题解】

将所有边与询问从大到小排序,并查集维护即可。遇到边则合并并查集,遇到询问查询并查集大小。

【代码】

#include<bits/stdc++.h>
struct state { int u,v,w,op; } A[200010];
int n,q,ans[100010],f[100010],siz[100010],tot;
inline int read ( void )
{
    int x=0;char ch;
    while ( !isdigit(ch=getchar()) ) ;
    for ( x=ch^48;isdigit(ch=getchar()); ) x=(x<<1)+(x<<3)+(ch^48);
    return x;
}
inline int find ( int x ) { return f[x]==x ? x : f[x]=find(f[x]); }
signed main()
{
    n=read();q=read();
    for ( int i=1;i<=n;i++ ) f[i]=i,siz[i]=1;
    for ( int i=1,u,v,w;i<n;i++ ) u=read(),v=read(),w=read(),A[++tot]=(state){u,v,w,0};
    for ( int i=1,k,x;i<=q;i++ ) k=read(),x=read(),A[++tot]=(state){x,i,k,1};
    std::sort(A+1,A+tot+1,[&](const state &p1,const state &p2){return p1.w==p2.w ? p1.op<p2.op : p1.w>p2.w;});
    for ( int i=1;i<=tot;i++ )
        if ( A[i].op ) ans[A[i].v]=siz[find(A[i].u)]-1;
        else
        {
            int fu=find(A[i].u),fv=find(A[i].v);
            if ( fu!=fv ) f[fv]=fu,siz[fu]+=siz[fv];
        }
    for ( int i=1;i<=q;i++ ) printf("%d\n",ans[i]);
    return 0;
}

原文地址:https://www.cnblogs.com/RenSheYu/p/11371640.html

时间: 2024-10-27 13:20:47

DTOJ #4492. 「USACO 2018 Jan」MooTube的相关文章

【USACO 2018 JAN Platinum】救生牛

问题描述 农夫约翰为他的奶牛们开了一个游泳池.简单起见,泳池每天在时刻 1 开门,一直到时刻 10^9才关闭. 为确保奶牛的安全,他雇佣了 N只救生牛,分别编号为 1,2,-,N.每只救生牛都有固定的工作时段.救生牛 i(1≤i≤N)的工作时段可以用两个整数 si,t?i?? 描述,表示救生牛 i 的工作时段为 (si,ti] .例如,一个救生牛的 si=4,ti=7,则它在时刻 4+1=5 开始工作,在时刻 7 结束工作,共覆盖三个时刻(不含起始时刻,含结束时刻). 现在约翰难以负担救生牛的高

Censoring「USACO 2015 Feb」

题目描述 有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程. 输入格式 包含两行,第一行为S串,第二行为T串 输出格式 输出题目要求的字符串序列 样例 输入样例 whatthemomooofun moo 输出样例 whatthefun 讲一下题意:拿样例模拟一下,u往后添加一直到"whatthemomoo"时把末尾的"moo"删掉->"what

SAP 荣获「中国好公司」头衔

近日,由上海报业集团 | 界面·财联社发起的2018[中国好公司]评选公布结果,SAP 凭借在市场表现.创新活力.内部治理.外部评价四大维度的杰出表现,荣获「中国好公司」年度大奖. 2018年是改革开放第40个年头,市场经济下各行各业百花齐放,中国企业数量已增至1.4亿家.在这个特别的时间节点,上海报业集团 | 界面·财联社发起了2018[中国好公司]评选,旨在深度挖掘各行业中,在市场表现.创新能力.内部治理与社会效应等方面均衡发展的卓越企业.领导者.创新企业与案例的成功经验与模式,传播市场经济

LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例

二次联通门 : LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例 /* LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例 很显然 贪心方程哦不 dp方程为 f[i][j]=f[i-1][j-k*k] 但是这样的话复杂度就是O(N ^ 5) 那么就用bitset优化一下 就ok了 */ #include <iostream> #include <cstdio> #include <bitset> void

Linux 小知识翻译 - 「编译器和解释器」

这次聊聊「编译器和解释器」. 编程语言中,有以C为代表的编译型语言和以Perl为代表的解释型语言.不管是哪种,程序都是以人类能够理解的形式记录的,这种形式计算机是无法理解的. 因此,才会有编译器和解释器. 对于编译型语言,是使用编译器将人类可读的代码转换为机器能够理解的「机器语言」文件,然后通过执行这个「机器语言」文件来实现程序的执行. 另一方面,对于解释型语言,是使用解释器将人类可读的代码逐行解释,一边解释一边执行这个程序.(这里的解释是将代码解释成机器语言,让计算机能够理解) 甚至有的语言既

「每日一歌」微信公众号

最近弄了一个微信公众号,叫做「每日一歌」(微信ID:Song_Daily).每天早上6点,分享一首经典歌曲.欢迎各位来关注! 音乐,广义而言,就是指任何以声音组成的艺术.英文Music一词源于古希腊语的μουσικ?(mousike),意即缪斯(muse)女神的艺术.而中文的音乐二字,许慎<说文解字>解释为“音,声也.生于心,有节于外,谓之音.”认为音乐和声音的区别,在于音乐需要透过人心去想像和创造.音乐可分为创作.演奏.聆听三个过程,在不同文化和社会,对于音乐的过程及其重要性都有不同的理解.

LibreOJ「LibreOJ β Round #4」 游戏

二次联通门 : LibreOJ「LibreOJ β Round #4」 游戏 /* LibreOJ「LibreOJ β Round #4」 游戏 找找规律就会发现.. 当有X的时候,答案跟X个数的奇偶有关 否则就求一下逆序对就好了.. 由于SB的错误..WA了3发才过 然后就签完到走人了 */ #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #defi

LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意

二次联通门 : LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意 /* LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意 本想打个暴力找找规律 结果交上去就A了... 读入所有数 处理出前缀和 然后枚举区间长度 处理处1~n的答案 后O(1)查询即可 复杂度O(n^2 + m) */ #include <iostream> #include <cstring> #include <cstdio> voi

一元治愈微信应用的「脸盲症」

「脸盲症」是一种经过正式确认的疾病,全名「面部辨识能力缺乏症」.古装剧里的姑娘戴上面纱少侠就认不出了?下次遇到这种情节别吐槽编剧啦,兴许这位少侠就患有脸盲症呢. 其实在很多方面,计算机软件不止一次吊打了人类,除了最基本的计算.记忆.分析等,这次轮到面部识别能力了- 有些童鞋可能已经知道,现在已经有手机平台实现在自带的相册应用中提供了人脸识别功能,可以自动分析手机里的所有照片,然后将包含同一个人的照片自动分组到一起. 但也许你不知道,这样的功能其实早就有了,而且对于应用开发者来说,甚至不需要自己深