好久没更了。前段时间去ec-final,实力水一波,混了个铜,虽然很弱,但是可以算是对之前一段时间的回报吧。

现在每天忙着复习,逃课太多,啥都不会。。。不想挂科啊!!Orz...

  题意(简化):警察想抓捕黑手党老大。现在警察们认为黑手党内部是树形结构,每个人看做节点。删除一个节点,这棵树就分为几个连同分量。现在对于每个节点,删去后得到的连同分量的最大值为t。t的值最小的是哪些人,都输出。

  解法:对于节点,他的最大连同分量只可能来自2方面,他的孩子方向或者他的父亲方向。只要判断一下大小即可。

#include<cstdio>
#include<cstring>
#include<vector>
#include<iostream>
using namespace std;
const int MAXN = ;
struct node{
int to;
int next;
}edge[MAXN*];
int index,vis[MAXN],pre[MAXN],n;
int num[MAXN],dp[MAXN],way[MAXN],ans[MAXN];
void add(int x,int y)
{
edge[index].to = y;
edge[index].next = pre[x];
pre[x] = index++;
}
void dfs1(int rt)
{
vis[rt] = ;
int i;
for(i=pre[rt]; i!=-; i=edge[i].next){
int v = edge[i].to;
if(!vis[v]){
dfs1(v);
if(dp[rt] < num[v]){
dp[rt] = num[v];
way[rt] = v;
}
num[rt] += num[v];
}
}
num[rt] += ;
}
void dfs2(int rt,int pa)
{
vis[rt] = ;
int i;
if(pa == -){
for(i=pre[rt]; i!=-; i=edge[i].next){
int v = edge[i].to;
if(!vis[v]){
ans[rt] =max(ans[rt], num[v]);
dfs2(v,rt);
}
}
}
else {
ans[rt] = n - num[rt];
for(i=pre[rt]; i!=-; i=edge[i].next){
int v = edge[i].to;
if(!vis[v]){
ans[rt] = max(ans[rt], dp[rt]);
dfs2(v,rt);
}
}
}
}
int main()
{
int i,j;
while(~scanf("%d",&n))
{
index = ;
memset(pre,-,sizeof(pre));
for(i=; i<n; i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
memset(dp,,sizeof(dp));
memset(way,,sizeof(way));
memset(num,,sizeof(num));
memset(ans,,sizeof(ans));
memset(vis,,sizeof(vis));
dfs1();
memset(vis,,sizeof(vis));
dfs2(,-);
int v = ;
for(i=; i<=n; i++){
if(ans[i] != )
v = min(v,ans[i]);
}
int flag = ;
for(i=; i<=n; i++){
if(v == ans[i])
{
if(!flag){
printf("%d",i);
flag = ;
}
else printf(" %d",i);
}
}
cout<<endl;
}
}

poj3107 树形dp的更多相关文章

  1. poj3107(树的重心,树形dp)

    题目链接:https://vjudge.net/problem/POJ-3107 题意:求树的可能的重心,升序输出. 思路:因为学树形dp之前学过点分治了,而点分治的前提是求树的重心,所以这题就简单水 ...

  2. [poj3107/poj2378]Godfather/Tree Cutting树形dp

    题意:求树的重心(删除该点后子树最大的最小) 解题关键:想树的结构,删去某个点后只剩下它的子树和原树-此树所形成的数,然后第一次dp求每个子树的节点个数,第二次dp求解答案即可. 此题一开始一直T,后 ...

  3. 树形dp专辑

    hdu 2196 http://acm.hdu.edu.cn/showproblem.php?pid=2196 input 5//5个结点 1 1//表示结点2到结点1有一条权值为1的边 2 1//表 ...

  4. 树形DP小结

    树形DP1.简介:树是一种数据结构,因为树具有良好的子结构,而恰好DP是从最优子问题更新而来,那么在树上做DP操作就是从树的根节点开始深搜(也就是记忆化搜索),保存每一步的最优结果.tips:树的遍历 ...

  5. 树形 DP 总结

    树形 DP 总结 本文转自:http://blog.csdn.net/angon823/article/details/52334548 介绍 1.什么是树型动态规划 顾名思义,树型动态规划就是在“树 ...

  6. poj3417 LCA + 树形dp

    Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4478   Accepted: 1292 Descripti ...

  7. COGS 2532. [HZOI 2016]树之美 树形dp

    可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...

  8. 【BZOJ-4726】Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

  9. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

随机推荐

  1. 多次访问节点的DFS POJ 3411 Paid Roads

    POJ 3411 Paid Roads Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6553   Accepted: 24 ...

  2. OpenCV的安装与系统环境变量

    OpenCV的安装与系统环境变量 安装OpenCV本来是很简单的一件事,但配置却很麻烦.而且在配置过程中尤为重要的步骤就是系统环境变量的配置.我使用的是CodeBlick13.12与OpenCV1.0 ...

  3. POJ 3250 Bad Hair Day --单调栈(单调队列?)

    维护一个单调栈,保持从大到小的顺序,每次加入一个元素都将其推到尽可能栈底,知道碰到一个比他大的,然后res+=tail,说明这个cow的头可以被前面tail个cow看到.如果中间出现一个超级高的,自然 ...

  4. Daikon Forge GUI 制作图集和字体集

    Daikon Forge GUI 制作UI面板 在上次的学习中制作了一个简单的面板,下面来学习制作图集以及字体. 1.DF-GUI 图集(Atlas)制作 操作步骤 选中UI Root根节点,在Sce ...

  5. 用运算符代替if、else

  6. Spring之AOP

    package org.zln.module.test3_aop.interceptor; import org.aspectj.lang.ProceedingJoinPoint; import or ...

  7. usb驱动开发4之总线设备驱动模型

    在上文说usb_init函数,却给我们留下了很多岔路口.这次就来好好聊聊关于总线设备驱动模型.这节只讲理论,不讲其中的函数方法,关于函数方法使用参考其他资料. 总线.设备.驱动对应内核结构体分别为bu ...

  8. zabbix架构

    监控系统: 数据的采集---存储---展示和分析---报警 snmp           cacti:rrd agent           nagios:不保存数据,mysql icmp/ssh   ...

  9. Linux Linux程序练习十一(网络编程大文件发送UDP版)

    //网络编程发送端--大文件传输(UDP) #include <stdio.h> #include <stdlib.h> #include <string.h> # ...

  10. 未能进入中断模式,原因如下:源文件“XXXXXX”不属于正在调试的项目。

    这个问题是由于项目文件位置变动导致的.提示框已经说的比较清楚了. 首先可以尝试[重新生成] ,一般可以解决这个问题了. 我遇到的情况是,设置配置时,不小心取消了生成选择. 所以打开配置管理器,把相关的 ...