树的最大独立集(1初步)

poj2342


   先预热一下,开始先从这个入手,然后再做poj3342,实质都是一样的。


   题意:输入的前n个单数是每个人的快乐程度,就当做价值吧,后n-1个是关系,最后以0 0 结束关系。求整体价值最大,要求他们每个人的关系不能是直接的上下属,即结点间不相邻。

   注意: 价值 在这题中 有正有负 , 人数是<6000 ,整形sum 计算价值是足够的。


   思想: 是结点对结点的递推,而不会一层对上一层的递推。

        有两个状态,1 .结点u 和 它的子节点的子节点集

                   2 .结点u的子节点集

         (那么就应该用两个空间变量去存储更新)

         由于价值有正有负,要求它的最大值,那么,max()进行更新


         每种状态求得的是  该结点的最大价值,由该节点去推 父节点和父父节点 




#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
int dp[6001][2],par[6001];

void dfs( int r ,int n)
{
	int i,m;

	
    
	for(i = 1;i <= n ;i++ )
	{
		if(par[i] == r)
		{
			dfs(i , n);

			m =  max(dp[i][0] , dp[i][1]);
			dp[r][0] = max(dp[r][0] , m + dp[r][0]);
			if(par[r]!=0)
			dp[par[r]][1] = max(dp[par[r]][1] , m + dp[par[r]][1]);
		}
	}

}
int main()
{
	int n,i,j;
	int c,f,m,root;
	while(scanf("%d",&n)!=EOF)
	{
		memset(par,0,sizeof(par));
	    memset(dp,0,sizeof(dp));
		for(i= 1 ;i <= n;i++)
		 scanf("%d",&dp[i][1]);

		root = 0;
		for(i= 0;i<n;i++)
		{
			scanf("%d %d", &c ,&f);
			if(c== 0 && f == 0)break;
            par[c] =f;
			if(par[f] == 0)root = f;
		}


		dfs(root , n);

		m =  max(dp[root][0] ,dp[root][1]);

		printf("%d\n",m);	


	}


	return 0;
}

### Bash Shell 基础使用指南 #### 什么是 BashBash(Bourne Again SHell)是一种广泛使用的 Unix shell 和命令解释器,最初由 Brian Fox 开发并于 1989 年发布。它是 GNU Project 的一部分,并成为大多数 Linux 发行版默认的 shell 工具[^3]。 #### Bash Shell 的基本特性 Bash 提供了许多内置命令来帮助用户高效操作文件系统和执行脚本任务。一些常见的内置命令包括 `cd`、`exit`、`echo`、`pwd` 和 `history` 等[^2]。这些命令的功能直接存储在 shell 中,无需依赖外部二进制程序即可运行。 以下是几个常用的 Bash 功能及其说明: 1. **路径导航** - 使用 `cd` 命令可以更改当前工作目录。 ```bash cd /path/to/directory ``` 2. **显示当前位置** - 使用 `pwd` 可以打印当前的工作目录路径。 ```bash pwd ``` 3. **查看历史记录** - 使用 `history` 查看之前输入过的命令列表。 ```bash history ``` 4. **退出终端会话** - 输入 `exit` 即可关闭当前的 shell 会话。 ```bash exit ``` 5. **变量管理** - 定义环境变量并将其导出到子进程中。 ```bash export MY_VAR="example value" echo $MY_VAR ``` 6. **条件判断与循环结构** - 支持复杂的逻辑控制语句,例如 if 条件测试以及 while/for 循环。 ```bash if [[ "$VAR" == "value" ]]; then echo "Condition met!" fi for i in {1..5}; do echo "Iteration $i" done ``` 7. **管道与重定向** - 利用管道符 (`|`) 将一个命令的标准输出传递给另一个命令作为标准输入。 ```bash ls | grep ".txt$" ``` - 文件读写可以通过重定向完成: ```bash cat file.txt > output.log # 覆盖模式保存至output.log cat another_file >> output.log # 追加模式追加数据 ``` #### Bash vs Zsh:如何选择? 尽管两者都属于交互式 shell 类型工具,但在灵活性上各有千秋。如果追求跨平台支持度高且稳定性强的选择,则推荐优先考虑 Bash;而当更倾向于个性化定制体验或者希望尝试更多新颖特性的场景下可以选择 Zsh[^1]。 #### 解决常见问题的方法 对于初学者来说,在学习过程中可能会遇到各种各样的疑问点。这里列举了一些典型的例子及解决方案: - 如果发现某些特定字符无法正常解析,请确认是否设置了正确的编码格式; - 当试图调用某个外部应用程序失败时,检查 PATH 是否包含了该应用所在位置; - 对于复杂表达式的调试需求,借助 set -x 参数开启逐条跟踪功能以便定位错误源头。 ```bash set -x your_command_here arg1 arg2 ... ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值