BZOJ3252: 攻略 可并堆

网上有很多人说用dfs序+线段树做...其实stl的堆可以...可并堆可以...很多奇奇怪怪的东西都能做...

可并堆比较好想...也比较好写...

分析:

首先,这是一个网络流做不了的题...数据太大...

其次...我们可以这样考虑一下,这个点的子树中,将这个点的权值仅更新给最大的那个就能满足

之后,在每一个叶子节点上,建立一个大根堆,dfs一遍,将子节点的堆合并,之后找到根节点,将根节点的权值加上当前位置的价值

最后,根节点中前k大的权值和即为答案...

附上代码,精简可行

#include <cstdio>
#include <algorithm>
#include <queue>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cstring>
using namespace std;
#define N 200005
#define ll long long
struct node
{
	int ls,rs,dis;
	ll x;
}mp[N<<1];
struct no
{
	int to,next;
}e[N<<1];
int head[N],cnt,fa[N],a[N],n,K;
void add(int x,int y)
{
	e[cnt].to=y;
	e[cnt].next=head[x];
	head[x]=cnt++;
	return ;
}
int merge(int x,int y)
{
	if(!x)return y;
	if(!y)return x;
	if(mp[x].x<mp[y].x)swap(x,y);
	mp[x].rs=merge(mp[x].rs,y);
	if(mp[mp[x].rs].dis>mp[mp[x].ls].dis)swap(mp[x].ls,mp[x].rs);
	mp[x].dis=mp[mp[x].rs].dis+1;
	return x;
}
void dfs(int x,int from)
{
	for(int i=head[x];i!=-1;i=e[i].next)
	{
		int to1=e[i].to;
		if(to1!=from)
		{
			dfs(to1,x);
			fa[x]=merge(fa[to1],fa[x]);
		}
	}
	mp[fa[x]].x+=a[x];
}
int in1[N];
int main()
{
	memset(head,-1,sizeof(head));
	scanf("%d%d",&n,&K);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		in1[x]++,in1[y]++;
		add(x,y);
		add(y,x);
	}
	int rot=1,num=0;
	for(int i=1;i<=n;i++)
	{
		if(in1[1]==1&&in1[i]!=1)
		{
			rot=i;
		}else
		{
			num++;
			fa[i]=i;
		}
	}
	K=min(num,K);
	dfs(rot,0);
	ll ans=0;
	while(K--)
	{
		ans+=mp[fa[rot]].x;
		mp[fa[rot]].x=0;
		fa[rot]=merge(mp[fa[rot]].ls,mp[fa[rot]].rs);
	}
	printf("%lld\n",ans);
	return 0;
}

  

原文地址:https://www.cnblogs.com/Winniechen/p/8990559.html

时间: 2024-08-30 05:37:49

BZOJ3252: 攻略 可并堆的相关文章

线段树 BZOJ3252 攻略

3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 496  Solved: 211[Submit][Status][Discuss] Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景.所有场景和选择支构成树状结构:开始游戏时在根节点(共通线)

BZOJ3252 攻略

Orz hzwer 只要用堆就可以了,跪烂了... 话说那个什么ext的库真的能用嘛= =,反正我用了烂删除 结果Rank.3←_← 1 /************************************************************** 2 Problem: 3252 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:964 ms 7 Memory:14036 kb 8 *****************

【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心

3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 339  Solved: 130[Submit][Status][Discuss] Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景.所有场景和选择支构成树状结构:开始游戏时在根节点(共通线)

Dfs【bzoj3252】攻略

Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景.所有场景和选择支构成树状结构:开始游戏时在根节点(共通线),叶子节点为结局.每个场景有一个价值,现在桂马开启攻略之神模式,同时攻略k次该游戏,问他观赏到的场景的价值和最大是多少(同一场景观看多次是不能重复得到价值的) "为什么你还没玩就知道每个场

前台页面优化全攻略(三)

经过前两篇文章的实践,你的网站加载速度一定有了非常明显的变化.能把实践跟到这篇文章的人想必一定是极客中的极客.如果你仍对网站的加载速度不满意,可以看看再尝试一下本文中几近疯狂的终极优化方案. 你可以对网站进行快速的优化,但网站日常的节食却很难.也许你已经花了很大的力气去优化你的CSS和JavaScript代码,但是你所做的努力马上又会因为老板或客户期望的新功能而付之东流.所以看来不论是人还是网页,减肥都贵在坚持. 这篇终极减肥方案可能不适合所有的网站,但是我相信它可以引起你对网页大小的重视. 1

北京簋街 美食全然攻略 + 簋街好吃的夜宵去处-----店铺介绍大全

作者:lihao102 为什么叫簋街? 簋街东起二环路东直门立交桥西端,西到交道口东大街东端.在这条全长1442米的东内大街上,沿街共同拥有各种商业店铺150多家,当中餐饮服务业100多家,约占东内大街所有店铺的60%以上.饭馆密度如此之大,全北京恐怕再也找不出第二条来了.至于簋街名字的由来,据说是来自老北京的“鬼市”.早年北京那些以贩卖杂货菜果为主的集市,后半夜开市,黎明即散,摊主以煤油灯取亮,远处看上去灯影憧憧,故名“鬼市”.另一种通常的说法是东直门内大街餐厅生意红火,因为来此宵夜的出租汽车

3D计算机图形学零起点全攻略(转)

3D计算机图形学零起点全攻略 这篇文章不包含任何技术知识,但我的希望它能指明一条从零开始通往3D领域的成功之路.我将罗列我看过的相关经典书籍作为学习文献,阅读规则是每进入下个内容,我都会假设已经完成前面全部的文献研习内容.相信若能按照这条路走到最后,会有所进益. 完成整部分内容需要具备基础: 英语:CET4以上 数学:精通数字加减乘除法. 物理:基本力学. 计算机:了解电脑的基本知识,熟练使用Windows. 电脑配置: CPU:双核1.5以上 显卡:NVIDIA GeForce8400G MS

【贪心】 BZOJ 3252:攻略

3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 261  Solved: 90[Submit][Status][Discuss] Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景.所有场景和选择支构成树状结构:开始游戏时在根节点(共通线),

新仙剑奇侠传完美攻略

小学的时候很为这个游戏着迷,重复玩了98版的不下十次,但是98版的没有好结局.今天看了下新版的剧情攻略,其实也和98版的差不多,但结局有几种选择了,决定再玩一次. 梦境-罗刹洞 飞龙失伴云中探,遗恨天际陨灵珠.李逍遥乘着飞剑,追踪几个小鬼来到罗刹洞.洞中的小妖不难对付,路也不难走,不多久就能见到BOSS罗刹鬼婆.此战必败,随便打打就是了,不用浪费了刚得的高等级药物,药物醒来后不会消失.动手吧~!十八年后,俺又是一条好汉~!醒来后剧情,发现婶婶在床边敲打着,原来刚才发生的一切只是南柯一梦. 支线剧