首页 > 其他分享 >收集签名

收集签名

时间:2024-08-27 11:52:50浏览次数:10  
标签:收集 int 4005 back 签名 push n1 dp

  • 虽然这道题看起来好像不太能DP的样子,但事实上的确是树形DP,我们考虑每条边怎样被覆盖——而不是被整条路径局限了思维
  • 我们依次用x的每个子树y更新x,在子树中枚举i,i>0时,|i|表示有多少个“超级技能”起点向外扩展,i<0时,|i|表示有多少个“超级技能”起点向内扩展,同时子树内有|i|个“超级技能”终点被处理
  • 那么这条边就要被技能覆盖k次,产生i*k的代价
  • 同时,除非i=-lefy,否则这条边依然要被正常地走一次,产生w(x,y)的代价
  • 原子树的代价为dp[x][s-i]
  • 子树内其他边的代价为dp[y][i],因为i>0时,要有|i|个未处理的“超级技能”起点,才能向外扩展;i<0时,要有|i|个未处理的“超级技能”终点,才能向内扩展
  • 通过将dp的下标扩展到负数,统一“起点”“终点”两种情况
  • 对于一棵子树,在子树内的代价已经被计算的前提下,我们并不关心起点/终点的具体位置,而只关心里面有多少个起点/终点
点击查看代码
#include <bits/stdc++.h>
using namespace std;
vector<int>a[4005],c[4005];
int n;
long long k;
int fa[4005],s[4005],h[4005];
bool b[4005];
void dfs(int n1)
{
	if(n1!=1&&a[n1].size()==1)
	{
		h[n1]=1;
	}
	else
	{
		h[n1]=0;
	}
	s[n1]=b[n1];
	for(int i=0;i<a[n1].size();i++)
	{
		if(a[n1][i]!=fa[n1])
		{
			fa[a[n1][i]]=n1;
			dfs(a[n1][i]);
			s[n1]+=s[a[n1][i]];
			h[n1]+=h[a[n1][i]];
		}
	}
}
long long f[4005][8005];
void dp(int n1)
{
	for(int j=-h[n1];j<=s[n1];j++)
	{
		f[n1][j+h[n1]]=-1;
	}
	if(n1!=1&&a[n1].size()==1)
	{
		f[n1][-1+h[n1]]=0;
	}
	f[n1][h[n1]]=0;
	if(b[n1])
	{
		f[n1][1+h[n1]]=0;
	}
	for(int i=0;i<a[n1].size();i++)
	{
		if(a[n1][i]!=fa[n1])
		{
			int y=a[n1][i];
			dp(y);
			for(int j=-h[n1];j<=s[n1];j++)
			{
				f[0][j+h[n1]]=f[n1][j+h[n1]];
				f[n1][j+h[n1]]=-1;
			}
			for(int l=-h[y];l<=s[y];l++)
			{
				if(f[y][l+h[y]]!=-1)
				{
					for(int j=-h[n1];j<=s[n1];j++)
					{
						if(j-l>=-h[n1]&&j-l<=s[n1]&&f[0][j-l+h[n1]]!=-1)
						{
							long long val=abs(l)*k+(l>-h[y])*c[n1][i]+f[0][j-l+h[n1]]+f[y][l+h[y]];
							if(f[n1][j+h[n1]]==-1)
							{
								f[n1][j+h[n1]]=val; 
							} 
							else
							{
								f[n1][j+h[n1]]=min(f[n1][j+h[n1]],val);
							}
						}
					}
				}
			}
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		cin>>n>>k;
		for(int i=1;i<=n;i++)
		{
			a[i].clear();
			c[i].clear();
			int opt;
			cin>>opt;
			b[i]=opt;
			fa[i]=0;
		}
		for(int i=1;i<n;i++)
		{
			int u,v,w;
			cin>>u>>v>>w;
			a[u].push_back(v);
			a[v].push_back(u);
			c[u].push_back(w);
			c[v].push_back(w);
		}
		dfs(1);
		dp(1);
		cout<<2*f[1][h[1]]<<endl;
	}
	return 0;
}

标签:收集,int,4005,back,签名,push,n1,dp
From: https://www.cnblogs.com/watersail/p/18382407

相关文章

  • 别人工作8小时,我只需1小时!这些宝藏网站我都替你收集好了!
    软件mac应用下载很多破解版应该都可以找到snipaste:截图工具,快捷截图,贴图等功能。幕布:快速编辑思维导图。sublimetext:文档编辑器(打开速度贼快)。visualstudiocode:新一代编辑器(插件非常丰富)MicroSoftTODO:好用的TODO软件。Raycast:客户端应用导......
  • 如何使用 AWS CLI 为私有 AWS S3 存储桶中的对象创建预签名 URL
    本文档的目的是介绍使用AWSCLI为s3对象创建预签名URL的步骤。欢迎来到雲闪世界。快速事实“如果您使用预签名URL,则无需将存储桶公开,事实上,最好不要这样做。”—AWSSupport背景AmazonWebServices简单存储服务(AWSS3)是AWS的服务之一,您可以以低廉的价格......
  • 【信息收集】 SSH指纹
    原创儒道易行一、SSH指纹首次通过SSH连接一台服务器时,SSH服务返回其指纹信息,如果确认指纹信息无误,该指纹将保存到~/.ssh/know_hosts中,服务器IP与指纹一一对应;第二次访问SSH服务时,SSH客户端将对比返回的指纹与~/.ssh/know_hosts是否一致,一致就顺利连接,否则警告可能遭遇到中......
  • 【整理】【信息收集】隐藏目录
    待区分❗----------------------------------------------------------------扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏robots.txt:指定了网站中不想被robot访问的目录网站备份文件:网站源码、配置文件、数据库文件后台目录:弱口令,万能密码,爆破安装包:获取数据库......
  • 【整理】【信息收集】敏感文件泄露
    ❗待区分------------------------------------------------------利用github、gitee等代码托管平台•CMS识别•git源码泄露•svn源码泄露•hg源码泄漏•网站备份压缩文件•WEB-INF/web.xml泄露•DS_Store文件泄露•SWP文件泄露•CVS泄露•Bzr泄露•Gi......
  • 【整理】【信息收集】敏感目录
    一、敏感目录类型二、敏感目录收集2.1在线查询一、敏感目录类型数据文件、配置信息、上传目录、后台登录目录、安装页面、数据库版本、PHP版本、后台压缩包、未授权访问等。二、敏感目录收集2.1在线查询(1)Google语法1)site:查找与指定的网站有联系的URL。用法......
  • Eagle 4.0:强大插件加持的素材收集管理工具
    期待很久的全新 Eagle 4.0 现已正式推出了!Eagle是一款Win/Mac双平台素材收集管理工具,它可以帮你高效整理电脑中的图片、字体、视频、音频等各种素材,是众多设计师、美图收集爱好者的信赖之选。4.0版是一次全面的革新,从全新的插件系统到实用的 AI工具,再到重新设计......
  • 信息收集
    信息收集-HelloCTF(hello-ctf.com)图片搜索网址描述谷歌识图优秀的图片搜索引擎,以搜索效果著称。手机用户可点击浏览器菜单→开启“浏览电脑版网页”以访问上传图片功能。百度识图适合中文网站图片资源搜索的工具。搜狗识图提供人性化的图片识别功能,包括......
  • linux ubuntu驱动签名
    Aug2307:07:16ubuntukernel:JWNetFilter:loadingout-of-treemoduletaintskernel.Aug2307:07:16ubuntukernel:JWNetFilter:moduleverificationfailed:signatureand/orrequiredkeymissing-taintingkernelAug2307:07:16ubuntukernel:JWNetFilte......
  • 信息收集利器|一款功能强大的子域收集工具
    01工具介绍(下载地址见最后)在hw等攻防演练中,信息收集做为演练厨师阶段最重要的步骤,方式方法尤为重要,好的工具达到事半功倍的效果。OneForAll是一款集百家之长,功能强大的全面快速子域收集终极神器。解决以下痛点:在渗透测试中信息收集的重要性不言而喻,子域收集是信息收集中......