UVA 1218 Perfect Service (树上 DP)

字符集的选择 字符集的选择 一:背景介绍 DICOM特定字符集(0008,0005) 此标签获得不同的值就代表使用不同的语言进行解码。 以下为多家CT厂商的(0008,0005)取值: 字符集: unicode是字符集,ASCII、GB2312、GBK、GB18030既是字符集也是编码方式,UTF-8只是编码方式。 二:中文字符集介绍 世界通用字符集——UTF 中文字符集——GB2312、GBK、GB18030 字符集的详细介绍 一:UTF-8 程序是把一个字节一个字节的来读取,然后再根据字节中开头的bit 阅读详情

UVA 1218 Perfect Service (树上 DP)

本题的状态数较多,一个节点有三种状态表示(一开始我只想到两个):
0、该节点不是服务器,该节点的父节点也不是服务器
1、该节点是服务器。
2、该节点不是服务器,该节点的父节点是服务器
对于着三种状态,分别用d(u,0),d(u,1),d(u,2)表示

对于以上三种状态进行分析,并写出状态转移方程
1、对于第一种状态,则子节点里有且仅有一个为服务器。需要枚举每一个子节点为d(v,1),把其他子节点的d(v,0)相加。如果在每次枚举时进行计算,那么该操作时间复杂度为O(k2)。可以通过一个sum累计所有子节点的d(v,0),在进行枚举时,只需在sum的基础上加上一个d(v,1)再减去一个d(v,0)即可。时间复杂度降为O(k)
状态转移方程为:d(u,0)=min(d(u,0),sum+d(v,1)-d(v,0))
2、对于第二种状态,则该节点的子节点可以时服务器也可以不是服务器。
状态转移方程为:d(u,1)=∑min(d(v,1),d(v,2))\displaystyle\sum_{}^{} min(d(v,1),d(v,2))∑​min(d(v,1),d(v,2))
3、对于第三种状态,所有子节点都必须不是服务器
状态转移方程为d(u,2)=∑d(v,0)\displaystyle\sum_{}^{} d(v,0)∑​d(v,0),即为前面的sum。

初始化的值为
d(u,0)=INF ,INF最好设为比max_n多一点,以防在相加时溢出。
d(u,1)=1
d(u,2)=0

具体实现可以先将无根树转换为以1为根节点的有根树,在进行dp(但会很慢)
也可以直接用dfs从1节点遍历树,用vis数组标记访问过的节点,这样就避免了重复访问(即在子节点和父节点间无限循环),记得在对子节点进行完dfs后,将该子节点标记为未访问过,因为还要计算d(u,0)。如果不将子节点恢复为未访问,那么将无法计算。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int max_n=1e4+5;
int dp[max_n][3];//dp(u,0)表示该节点和父节点不是服务器,dp(u,1)表示该节点是服务器,dp(u,2)表示该节点不是服务器但父节点是服务器 
int n;
vector<int> son[max_n];
bool vis[max_n];
void dp_(int root)
{
	vis[root]=1;
	dp[root][0]=max_n;
	dp[root][1]=1;
	dp[root][2]=0;
	queue<int> q;
	for(int i=0;i<son[root].size();i++)
	if(!vis[son[root][i]])
	{
		vis[son[root][i]]=1;
		q.push(son[root][i]);
		dp_(son[root][i]);
		vis[son[root][i]]=0;
		dp[root][2]+=dp[son[root][i]][0];
		dp[root][1]+=min(dp[son[root][i]][2],dp[son[root][i]][1]);
	}
	for(int i=0;i<son[root].size();i++)
	if(!vis[son[root][i]])
		dp[root][0]=min(dp[root][0],dp[root][2]+dp[son[root][i]][1]-dp[son[root][i]][0]);
}
void solve(void)
{
	memset(vis,false,sizeof(vis));

	dp_(1);
	printf("%d\n",min(dp[1][0],dp[1][1]));
}
int main(void)
{
//	freopen("out.txt","w",stdout);
	while(true)
	{
		scanf("%d",&n);
		for(int i=1;i<=n-1;i++)
		{
			int a,b;
			scanf("%d%d",&a,&b);
			son[a].push_back(b);
			son[b].push_back(a);
		}
		int t;
		scanf("%d",&t);
		solve();
		if(t==-1)break;
		for(int i=1;i<=n;i++)
		son[i].clear();
	}
//	fclose(stdout);
}
2026滑块验证码终极实战:缺口检测算法+人机轨迹模拟,识别率从60%飙升至95%全方案 **摘要:2026年AIGC技术发展导致传统验证码失效,滑块验证码成为主流防护手段。本文深入分析了传统方案识别率低的原因,并提出多级检测融合和行为拟合优化方案。通过图像预处理优化、三级缺口检测引擎(差分图像法、Hu矩轮廓匹配、YOLOv8n模型兜底)将识别率提升至99.2%。同时针对轨迹模拟环节,设计了包含抖动特征、时间随机性和个体差异的行为模型,使通过率从12%提升至87%。该方案解决了传统方法在缺口定位精度和轨迹真实性方面的核心痛点,为应对新一代验证码风控提供了完整的技术框架。 阅读详情

相关推荐

给新人的储能系统入门图解:从电芯到EMS,一张图看懂BESS里那些‘黑话’

本文通过视觉化拆解储能系统,从电芯到EMS详细解析BESS中的关键组件和行业术语。涵盖电芯参数、模组组装、PCS功能、BMS与EMS分工,以及SOC、DOD等关键运维参数,帮助新人快速理解储能系统的核心技术和应用场景。

weixin_42522964的博客 592

树上dp 完美的服务(py)(Perfect Service)(UVa 1218)题解

累加器传送门:http://blog.youkuaiyun.com/NOIAu/article/details/71775000题目传送门:https://vjudge.net/problem/UVA-1218题目:A network is composed of N computers connected by N 1 communication links such that any two comput

Monica 862

从CTF到实战:Frida Hook无导出SO函数的3种特殊姿势

本文深入探讨了在移动安全逆向工程中,如何利用Frida Hook无导出SO函数的三种高级技巧:字符串引用定位法、调用栈回溯法和内存特征码扫描。针对安卓So层加固和混淆场景,文章结合CTF赛题与实战案例,详细解析了每种方法的原理、实现步骤与适用场景,为安全研究人员提供了从理论到实践的完整解决方案。

jenkins8butler的博客 516

树状DP UVa1218-Perfect Service

树状DP就是在树上的DP,指当前节点的解可以通过子孙节点的解求出,即状态转移方程是由子孙节点推出当前节点的。 使用遍历方法:由于树的一个特性,即任意两个节点之间只有一条路径,因此深搜时每个点只会访问一次,所以我们通常使用深搜来遍历,这时复杂度只有O(n)。在推出状态转移方程后,深搜大致过程如下(具体更新节点信息的位置视情况而定): void dfs(int v, int fa) { ...

wuzy38的博客 213

c语言压力变送器程序设计,基于单片机的压力变送器设计

基于单片机的压力变送器设计(任务书,开题报告,外文翻译,论文15000字,代码)摘要随着工业化水平的不断提高,新型智能仪表在工业生产过程中运用也越来越广泛,同时对输出数据的准确检测和处理也变得至关重要。生产过程的运行和设备安全是极其重要的,那么如何实现对其精确的检测呢?众所周知,在工业生产过程中有一个很重要参数——压力,显然这个参数是一个必不可少的条件。故而,研究智能压力变松器系统对工业生产有着不...

weixin_33681561的博客 1962

山东大学软件学院计算机组成原理课程设计实验二

文章目录一、实验时间二、实验内容1.设计异步模16加1计数器2.设计4位移位器3.超前进位16位ALU的设计 一、实验时间 2021年4月1日星期四,第五周 二、实验内容 1.设计异步模16加1计数器 基本功能:使用D触发器(dff元件)和异或门构建从0开始计数的模16加1计数器 对应的电路图(这里已经实现了预置初值的功能) 拓展功能: (1)实现模256加1计数器 (2)实现计数器预置初值的功能 这里复用了上面的模16加1计数器 这里异步触发器预置初值的功能是这样实现的: (1)首先将CLR端调为0,

叶卡捷琳堡的博客 5246

[UVa1218/POJ3398] Perfect Service (树形DP)

Description A network is composed ofNcomputers connected byN− 1 communication links such that any two computers can be communicated via a unique route. Two computers are said to beadjacentif th...

yyying2016的博客 324

C语言实验——各位数字之和排序

C语言实验——各位数字之和排序Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description给定n个正整数,根据各位数字之和从小到大进行排序。 Input输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面...

aiLMengi000的博客 1240

UVa #1218 Perfect Service (例题9-14)

发现动态规划的时间复杂度等于dp数组开的大小。像这道题是n*3,复杂度为O(n)。之前有些题目是n*n,复杂度就是O(n^2) 不像例题9-13,这道题本身是无根树,记忆化搜索的函数要加一个父亲节点作为参数。 Run Time: 0.045s #define UVa "LT9-14.1218.cpp" //Perfect Service char fileIn[30] =

专攻挖掘机炒鸡蛋算法的专栏 720

飞牛fnNAS同步微信微信聊天记录

微信聊天记录如何备份到NAS?本文介绍了利用NAS虚拟机和同步工具实现微信记录自动备份的方法。通过在NAS上搭建"云电脑"长期运行微信PC端,并配置微力同步将聊天记录文件夹自动同步到NAS存储,解决了传统电脑备份的安全性问题。操作步骤包括:1)在NAS上安装虚拟机系统;2)登录微信PC端并同步手机记录;3)配置同步工具将微信记录文件夹同步到NAS。该方法尤其适合不常使用PC微信的用户,可实现记录永久保存和远程查看,更换手机时也能快速恢复历史记录。

dgnankai的专栏 4297

AMBA-CHI协议详解(十五)

Write transactions事务描述以及请求属性,cache line状态转换。

Crazzy_M的博客 649

UVA1218[Perfect Service] 树上动态规划模型

UVa1218 树上动态规划模型

Venishel的博客 393

第069篇:浸入边界法进阶

浸入边界法(Immersed Boundary Method, IBM)是处理流固耦合问题的强大数值方法。本文深入介绍直接力法、反馈力法、Ghost Cell方法和多域IBM等高级技术。通过Python实现完整的IBM求解器,展示处理移动边界、弹性边界和多体相互作用的方法。浸入边界法,直接力法,反馈力法,Ghost Cell,流固耦合,移动边界,弹性边界Navier-Stokes方程添加体积力项:∂u∂t+(u⋅∇)u=−1ρ∇p+ν∇2u+f\frac{\partial \mathbf{u}}{\part

2401_87715305的博客 412

Perfect Service UVA - 1218树上的动态规划

#include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdio&gt; #include&lt;cstdlib&gt; #include&lt;cstring&gt; #include&lt;iomanip&gt; #include&lt;assert.h&gt; #include&lt;vector&gt; #

∑bit 187

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

斐波那契数列以及Catalan数通项公式的推导

1、斐波那契数列的通项公式推导: 已知斐波那契数列的递推公式为f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2)且f(0)=0,f(1)=1f(0)=0,f(1)=1f(0)=0,f(1)=1。 设斐波那契数列的生成函数为F(x)F(x)F(x),F(x)=∑i=0nf(i)xiF(x)=\sum_{i=0}^nf(i)x^iF(x)=∑i=0n​f(i)xi。 ...

WedsonLin的博客 1947

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

二次剩余与Cipolla算法

二次剩余与Cipolla算法 若存在x,使得 x2≡a(modp)x^2\equiv a \pmod{p}x2≡a(modp) 成立且a不是p的倍数,则称a为模p的二次剩余。 下文只讨论p为奇素数的情况。 1、模p二次剩余的个数 对于一个素数p,p的二次剩余有(p-1)/2个,非二次剩余有(p-1)/2个。 因为有(p−x)2≡x2(modp)(p-x)^2\equiv x^2 \pmod{p}(p−x)2≡x2(modp),所以在[1,(p-1)/2]范围内即可得到模p的所有二次剩余数,只需要证明在[1,

WedsonLin的博客 899

Timus 1673(反欧拉函数)

Timus 1673(反欧拉函数) 题目链接 有题意可知,设第i个教授掌管的实验室编号为index,则满足index≡i(modN)index\equiv i\pmod Nindex≡i(modN);对于第k个同学,只去编号为index′=kx(k≥1)index'=kx(k\ge 1)index′=kx(k≥1)的实验室。如果第k个同学要获得考试资格,则满足如下同余方程组 {kx1≡1(modN)kx2≡2(modN)...kxN≡N(modN)\left\{\begin{matrix} kx_1\eq

WedsonLin的博客 663

Miller-Rabin随机性素数测试方法

关于素数测试 素数测试就是判断一个整数是素数还是合数。一般判断素数p的方式是通过判断2到根号p内的整数是否可以整除p来实现。时间复杂度为O(p1/2)。如果p是一个m位二进制整数,m=floor(Ig(p+1)),O(p1/2)=O(2m/2)。 然而对于大整数而言,这样的时间复杂度显然是不可以接受的。 费马小定理:if n is prime   ∀a∈Zn∗ , an−1≡1(modn)if\space n\space is\

WedsonLin的博客 635

Codeforces Round #707 Div. 2/C Going Home

Codeforces Round #707 Div. 2/C Going Home 题意:在长度为N的数组A中找出满足ax+ay=aw+aza_x+a_y=a_w+a_zax​+ay​=aw​+az​的一组x,y,w,zx,y,w,zx,y,w,z,要求它们之间两两不同。(N≤2e5,1≤a[i]≤2.5e6(N\le 2e5,1\le a[i]\le 2.5e6(N≤2e5,1≤a[i]≤2.5e6 。 最简单直接的算法就是枚举序列中的(i,j)(i,j)(i,j)然后加以判断,这样做的做法是O(n2)O

WedsonLin的博客 610

关于概率的一些事(对于贝叶斯公式的一些初级理解)

关于概率的一些事 条件概率公式: P(A|B)=P(AB)/P(B)- - -111 当A,B事件相互独立时,有P(AB)=P(A)*P(B) P(B|A)=P(AB)/P(A)- - -222 联立111,222式,可得 P(A|B)=P(A)*P(B|A)/P(B)- - -333 333式也叫贝叶斯公式。 其中P(A)也叫先验概率(Prior probability),即在不知道B事件发生前,对A事件的一个主观评估的概率; P(A|B)也叫后验概率(Posterior probability),即在发

WedsonLin的博客 461

UVA 12563 (劲歌金曲)(多条件最优的动态规划问题)(01背包

UVA 12563 (劲歌金曲)(多条件最优的动态规划问题)(01背包) 依照题意可知,首要条件是:在t-1的时间内唱最多的歌曲数目,次要条件是:在不超过t-1的时间内唱的最久。 可以用dp_1[i]去表示在 i 时间内能唱的最多曲数。 用dp_2[i]去表示在 i 时间内能唱的最久时间。 状态转移的决策思想为: 1、如果在 j 时间内唱当前歌曲比不唱当前歌曲有着更大的歌曲数,那么同时更新dp_1和dp_2的值。 2、如果在 j 时间内唱当前歌曲和不唱当前歌曲有着一样的歌曲数,那么如果唱当前歌曲有着更长的唱

WedsonLin的博客 415

UVA1347(Tour)(DAG上的动态规划)

UVA1347(Tour)(DAG上的动态规划) 本题的难点主要在于状态的定义,即如何去表示节点的状态。 在紫书中,作者选择了dp(i,j)来表示第一个人走到了i点,第二个人走到了j点,且编号小于max(i,j)的节点都被走过。因为dp[i][j]和dp[j][i]是重复的,因此规定i>j。这样可以保证无后效性,因为小于max(i,j)的点都被选过了,接下来就是在大于max(i,j)里面选点,所以之后的状态不会影响到前面的状态。 接下来考虑状态如何转移,由于状态的定义,下一步只能向编号大于i的节点移动

WedsonLin的博客 413

扩展中国剩余定理(EXCRT)

扩展中国剩余定理(EXCRT) 中国剩余定理可以解形如下面的一元线性同余方程组: {ans≡x1(moda1)ans≡x2(moda2)ans≡x3(moda3)...ans≡xn(modan) \left\{\begin{matrix} ans\equiv x_1\pmod{a_1} \\ ans\equiv x_2\pmod{a_2} \\ ans\equiv x_3\pmod{a_3}\\ .\\ .\\ .\\ ans\equiv x_n\pmod{a_n} \end{matrix}\right.

WedsonLin的博客 407

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)/D

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)/D D.Two chandeliers 题意:给出两个无限循环序列A,B以及整数k,找出最小长度x满足对于1≤i≤x1\le i\le x1≤i≤x,恰好有k对ai≠bia_i\ne b_iai​​=bi​。 A序列的循环节长度为n,B序列为m。 对于序列A,B,找出循环节中所有的ai≠bia_i\ne b_iai​​=bi​的时间复杂度是O(nm)O

WedsonLin的博客 393

关于组合数取模

关于组合数取模 对于C(n,m) mod p (m<=n) 1、如果n,m比较,1<=m<=n<=1000,p<=1e9 可以用杨辉三角递推式去解决,用C[n][m]来储存C(n,m)的值,则递推式为: C[i][j] mod p=(C[i-1][j-1]+C[i-1][j]) mod p(1<=j<=i) C[i][0]=1 2、如果n,m较大,p较小(1<=m<=n<=1e18,p<=1e5 and p is prime) 可以用Luca

WedsonLin的博客 358
上一篇: UVA1331 Minimax Triangulation (区间DP)
下一篇: UVA 10817 Headmaster‘s Headache(最优配对问题,DP,状态压缩)
WedsonLin
博客等级 码龄7年 1粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值