题意:给出一个树,每个点有一个value,value的意义是去掉这个点之后所有连通分量中点最多的那个连通分量的点数,这棵树的重心为所有点value的最小值,求重心,及重心都有谁。

解法:貌似是个树形dp,不过不太懂树形dp···学了一下也没太明白这题为啥是树形dp···觉得其实是深搜···嗯···

随便找一个点当做根,我选了点1,每个点的value = max{max{sum[j]}, n - sum - 1},sum为所有儿子为根时的节点个数,直接搜就好。

对了···多组输入会PE···坑爹的OJ···

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define LL long long
using namespace std;
vector <int> al[16005];//邻接表存边
int n;
int dp[16005];
int dfs(int v, int u)
{
int len = al[v].size();
int res = 0, sum = 0;
for(int i = 0; i < len; i++)
{
if(al[v][i] != u)//判断是不是父亲节点
{
int tmp = dfs(al[v][i], v);
res = max(res, tmp);
sum += tmp;
}
}
dp[v] = max(res, n - sum - 1);
return sum + 1;
}
int main()
{
scanf("%d", &n);
memset(dp, -1, sizeof(dp));
for(int i = 0; i < n - 1; i++)
{
int v, u;
scanf("%d%d", &v, &u);
al[v].push_back(u);
al[u].push_back(v);
}
dfs(1, 0);
int ans = 16005;
for(int i = 1; i <= n; i++)
ans = min(ans, dp[i]);
int prt[16005] = {0};
int cnt = 0;
for(int i = 1; i <= n; i++)
if(dp[i] == ans)
prt[cnt++] = i;
printf("%d %d\n", ans, cnt);
for(int i = 0; i < cnt; i++)
{
if(i)
printf(" ");
printf("%d", prt[i]);
}
printf("\n");
return 0;
}

SGU 134 Centroid的更多相关文章

  1. SGU 134.Centroid( 树形dp )

    一道入门树dp, 求一棵树的重心...我是有多无聊去写这种题...傻X题写了也没啥卵用以后还是少写好.. ----------------------------------------------- ...

  2. SGU 134.Centroid(图心)

    SGU链接: 时间限制:0.25s 空间限制:4M 题意: 给出一个树(节点数<=16000),一个节点的重量定义为从树中去除这个点后,新得到的所有树中节点最多的树的节点数.树的中心定义为所有节 ...

  3. 树形DP求树的重心 --SGU 134

    令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值. 则树的重心定义为:一个点,这个点的属性值在所有点中是最小的. SGU 134 即要找出所有的重心,并且找出重心 ...

  4. Centroid - SGU 134(树的搜索)

    题目大意:给你一个树,树每个点都有一个值, 这个点的的值就等于所有儿子里面点最多的那个儿子,值最小的就叫做重心,求出重心,还有所有等于重心的点,按照升序输出. 分析:就是一个简单的搜索树,求出来最大的 ...

  5. SGU 分类

    http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...

  6. 快速切题 sgu134.Centroid 树形dp

    134. Centroid time limit per test: 0.25 sec. memory limit per test: 4096 KB You are given an undirec ...

  7. SGU 乱搞日志

    SGU 100 A+B :太神不会 SGU 101 Domino: 题目大意:有N张骨牌,两张骨牌有两面有0到6的数字,能相连当且仅当前后数字相同,问能否有将N张骨牌连接的方案?思路:裸的欧拉回路,注 ...

  8. SGU 乱乱开

    本解题报告 乱抄,乱写,随性随心,不喜多喷! SGU 142: 思路:一个string的字串不会超过2^20个,我们枚举出来就好了. 我出错点:数组RE #include<stdio.h> ...

  9. 今日SGU 5.5

    SGU 114 题意:求一个点到其他点的距离总和最小,距离的定义是x轴距离乘以那个点的人数p 收获:带权中位数,按坐标排序,然后扫一遍,最后权值超过或等于总权值的一半时的那个点就是答案,证明暂无 #i ...

随机推荐

  1. 分类-Category

    1.基本用途 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 继承 分类(Category) 2.格式 分类的声明 @interface 类名 (分类名称) // 方法声明 @end 分 ...

  2. ITaCS Change Password web part

    http://changepassword.codeplex.com/ A webpart is used to change your sharepoint AD password.

  3. 使用pd设计表的 多对多的中间表的设计方式, 有图有真相

    设计多对多表时解决重复问题 目前流行两种设计方式: 方式一 是在中间表中建一个单独的id主键, 与业务表关联的键设置为unique唯一; 干事二: 联合主键的方式, 该方式中间表不会有与业务表无关的主 ...

  4. 有关hadoop分布式配置详解

    linux配置ssh无密码登录 配置ssh无密码登录,先要安装openssh,如下: yum install openssh-clients 准备两台linux服务器或虚拟机,设置两台linux的ho ...

  5. Critical Rendering Path

    1.生成 dom & cssom https://developers.google.com/web/fundamentals/performance/critical-rendering-p ...

  6. iOS中的固定 高度

    iOS键盘高度   英文 216(不带联想功能) 英文 252(带联想功能)  中文 252 系统自带表情键盘的高度是 253   在使用系统键盘的时候,如果遇到输入框被键盘挡住的情况 就要用通知中心 ...

  7. Machine Learning for Developers

    Machine Learning for Developers Most developers these days have heard of machine learning, but when ...

  8. 团体程序设计天梯赛-练习集L1-005. 考试座位号

    L1-005. 考试座位号 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 每个PAT考生在参加考试时都会被分配两个座位号,一个 ...

  9. Unix/Linux下如何使用Vi编辑器

    vi 的工作模式 Vi 在初始启动后首先进入编辑模式,这时用户可以利用一些预先定义的按键来移动光标.删除文字. 复制或粘贴文字等.这些按键均是普通的字符,例如 l 是向右移动光标,相当于向右箭头键,k ...

  10. 学点PYTHON基础的东东--数据结构,算法,设计模式---单向链表

    看来看来,还是以下这个实现最优雅.. 其它的,要么NODE冗余,要么初始化丑陋... #!/usr/bin/env python # -*- coding: utf-8 -*- class Node: ...