POJ.1655 Balancing Act POJ.3107 Godfather(树的重心)
关于树的重心:百度百科
有关博客:http://blog.csdn.net/acdreamers/article/details/16905653
1.Balancing Act
题目大意:
有t组数据。每组数据给出n个点和n-1条边,构成一棵树,求该树的重心及删掉该点后形成的每棵子树的节点数。
代码:
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=; int n,cnt,H[N<<],Ans,size,son[N];
bool vis[N];
struct Edge
{
int to,nxt;
}e[N<<]; void read(int &now)
{
now=;char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c))now=(now<<)+(now<<)+c-'',c=getchar();
} void AddEdge(int u,int v)
{
e[++cnt].to = v;
e[cnt].nxt = H[u];
H[u] = cnt;
} void Init()
{
Ans=size=0x7fffffff;
for(int i=;i<=n;++i)
vis[i]=son[i]=H[i]=;
cnt=;
read(n);
int a,b;
for(int i=;i<n;++i)
read(a),read(b),AddEdge(a,b),AddEdge(b,a);
} void DFS(int cur)
{
vis[cur]=;
son[cur]=;
int tmp=;
for(int i=H[cur];i;i=e[i].nxt)
{
int to=e[i].to;
if(!vis[to])
{
DFS(to);
son[cur]+=son[to]+;
tmp=max(tmp,son[to]+);
}
}
tmp=max(tmp,n-son[cur]-);
if(size>tmp ||size==tmp&&Ans>cur)
{
Ans=cur;
size=tmp;
}
} int main()
{
int t;
read(t);
while(t--)
{
Init();
DFS();
printf("%d %d\n",Ans,size);
}
return ;
}
Balancing Act
2.Godfather
题目大意:
按升序输出该树的重心。
代码:
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=; int n,cnt,tot,size,H[N<<],Ans[N],son[N];
bool vis[N];
struct Edge
{
int to,nxt;
}e[N<<]; void read(int &now)
{
now=;char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c))now=(now<<)+(now<<)+c-'',c=getchar();
} void AddEdge(int u,int v)
{
e[++cnt].to = v;
e[cnt].nxt = H[u];
H[u] = cnt;
} void Init()
{
memset(H,,sizeof H);
memset(vis,,sizeof vis);
memset(Ans,0x3f,sizeof Ans);
size=0x7fffffff;
cnt=tot=;
read(n);
int x,y;
for(int i=;i<n;++i)
read(x),read(y),AddEdge(x,y),AddEdge(y,x);
} void DFS(int cur)
{
vis[cur]=;
son[cur]=;
int tmp=;
for(int i=H[cur];i;i=e[i].nxt)
{
int to=e[i].to;
if(!vis[to])
{
DFS(to);
son[cur]+=son[to]+;
tmp=max(tmp,son[to]+);
}
}
tmp=max(tmp,n-son[cur]-);
if(size>tmp)
{
size=tmp;
tot=;
Ans[tot]=cur;
}
else if(size==tmp)
{
Ans[++tot]=cur;
}
} int main()
{
Init();
DFS();
sort(Ans+,Ans++tot);
for(int i=;i<=tot;++i)
printf("%d ",Ans[i]);
return ;
}
Godfather
POJ.1655 Balancing Act POJ.3107 Godfather(树的重心)的更多相关文章
- POJ 1655 Balancing Act&&POJ 3107 Godfather(树的重心)
树的重心的定义是: 一个点的所有子树中节点数最大的子树节点数最小. 这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点. POJ 1655 题目大意: 直接给你一棵树,让你求树的 ...
- POJ 1655 Balancing Act && POJ 3107 Godfather
题目大意: 根据题目的图很好理解意思,就是记录每一个点的balance,例如 i 的balance就是把 i 从这棵树中除去后得到的森林中含有结点数最多 的子树中的节点个数,然后找到所有节点中对应的b ...
- poj 1655 Balancing Act 求树的重心【树形dp】
poj 1655 Balancing Act 题意:求树的重心且编号数最小 一棵树的重心是指一个结点u,去掉它后剩下的子树结点数最少. (图片来源: PatrickZhou 感谢博主) 看上面的图就好 ...
- poj 1655 Balancing Act(找树的重心)
Balancing Act POJ - 1655 题意:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. /* 找树的重心可以用树形dp或 ...
- POJ 1655 Balancing Act【树的重心】
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14251 Accepted: 6027 De ...
- POJ 1655.Balancing Act 树形dp 树的重心
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14550 Accepted: 6173 De ...
- POJ 1655 BalanceAct 3107 Godfather (树的重心)(树形DP)
参考网址:http://blog.csdn.net/acdreamers/article/details/16905653 树的重心的定义: 树的重心也叫树的质心.找到一个点,其所有的子树中最大的 ...
- POJ 1655 - Balancing Act 树型DP
这题和POJ 3107 - Godfather异曲同工...http://blog.csdn.net/kk303/article/details/9387251 Program: #include&l ...
- POJ 1655 - Balancing Act - [DFS][树的重心]
链接:http://poj.org/problem?id=1655 Time Limit: 1000MS Memory Limit: 65536K Description Consider a tre ...
随机推荐
- Linux 内核里的“智能指针”【转】
转自:http://blog.jobbole.com/88279/ 众所周知,C/C++语言本身并不支持垃圾回收机制,虽然语言本身具有极高的灵活性,但是当遇到大型的项目时,繁琐的内存管理往往让人痛苦异 ...
- gunicorn+flask使用与配置
gun.conf的内容 import os bind = '10.1.240.222:5000' workers = 4 backlog = 2048 worker_class = "syn ...
- Spring事务回滚和异常类
1.异常的一些基本知识 异常的架构 异常的继承结构:Throwable为基类,Error和Exception继承Throwable.Error和RuntimeException及其子类成为未检查异常( ...
- Spring MVC注解配置
http://blog.csdn.net/eventys/article/details/8208808
- 强大的Js树型控件Dtree使用详解
http://www.lmwlove.com/ac/ID868 在学习文章之前,要学会看官方网站http://destroydrop.com/javascripts/tree.从官方页面你能知道:dt ...
- 几种常用的Interpolator(插值器)的动画效果
在实现动画的非线性变化的方法中,常用的一种是为动画添加插值器以改变视图的属性值,从而实现理想的动画效果.Interpolator使用相对简单,下面就只给出一些提供的插值器的默认效果. 在代码中:直接调 ...
- hdu2888 二维ST表(RMQ)
二维RMQ其实和一维差不太多,但是dp时要用四维 /* 二维rmq */ #include<iostream> #include<cstring> #include<cs ...
- bind函数详解(转)
var name = "The Window"; var object = { name: "My Object", getNameFunc: function ...
- Mac配置Node.js环境
打开终端输入命令:(安装brew) ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...
- RDLC 主从报表筛选
今天继续学习RDLC报表的“参数传递”及“主从报表” 一.先创建DataSet,如下图: 二.创建一个报表rptDEPT.rdlc,显示部门T_DPET的数据 三.嵌入Default.aspx中,写在 ...