洛谷P4185 mootube(金组) 题解分析

这篇博客介绍了Farmer John创建的MooTube视频服务,其中每个视频都有一个‘推荐视频’列表。文章详细解析了FJ设计的‘相关性’度量标准,并构建了一棵树形结构来表示视频间的联系。为确定推荐视频的K值,文章提供了两种方法:DFS和BFS,以平衡视频推荐的数量和奶牛的注意力保持。
摘要由CSDN通过智能技术生成

mootube解析

题目
题目描述

在业余时间,Farmer John 创建了一个新的视频共享服务,他将其命名为 MooTube。在 MooTube 上,Farmer John 的奶牛可以录制,分享和发现许多有趣的视频。他的奶牛已经发布了 N个视频,为了方便将其编号为 1…N。然而,FJ 无法弄清楚如何帮助他的奶牛找到他们可能喜欢的新视频。

FJ 希望为每个 MooTube 视频创建一个“推荐视频”列表。这样,奶牛将被推荐与他们已经观看过的视频最相关的视频。

FJ 设计了一个“相关性”度量标准,顾名思义,它确定了两个视频相互之间的相关性。他选择 N−1 对视频并手动计算其之间的相关性。然后,FJ 将他的视频建成一棵树,其中每个视频是节点,并且他手动将 N−1 对视频连接。为了方便,FJ 选择了 N−1 对,这样任意视频都可以通过一条连通路径到达任意其他视频。 FJ 决定将任意一对视频的相关性定义为沿此路径的任何连接的最小相关性。

Farmer John 想要选择一个 K值,以便在任何给定的 MooTube 视频旁边,推荐所有其他与该视频至少有 K相关的视频。然而,FJ 担心会向他的奶牛推荐太多的视频,这可能会分散他们对产奶的注意力!因此,他想设定适当的 K值。 Farmer John希望得到您的帮助,回答有关 K值的推荐视频的一些问题。

解法

解法1:
DFS

#include <bits/stdc++.h>
using namespace std;

struct edge {
   
	int a, b, w;
};

struct query {
   
	int v, w, id;
};

int f[100001], sum[100001];
edge edges[100001];
query queries[100001];
int ans[100001];

int find(int a) {
   
	//防伪删除
	//此处是找到最近的节点
} 

void merge(int x, int y) {
   
	//防伪删除
	//利用find改变f与sum
}

bool cmpEdge(const edge &a, const edge &b) {
   
	return a.w > b.w;
}

bool cmpQuery(const query &a, const query 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值