POJ 3107 - Godfather 树形DP..vector慎用...
来源:互联网 发布:国外小说推荐 知乎 编辑:程序博客网 时间:2024/05/21 09:53
提交超时..实在觉得没什么好优化的...最多改回至底而上的BFS..但好麻烦,记一堆东西..看discuss才知道主要是vector的原因..改成手写链表..500MS过,,,
选择任意一个点做树的树的root...统计每个点的子树元素个数情况..对于不是root的点..将所有点数N减去当前子树的元素个数num.作为该点的另一个孩子...
Program:
#include<iostream>#include<stdio.h>#include<string.h>#include<set>#include<ctime>#include<algorithm>#include<queue>#include<cmath>#include<map>#define oo 1000000007#define ll long long#define pi acos(-1.0)#define MAXN 50005using namespace std; struct node{ int x,y,next;}line[MAXN*2]; int n,AnsNum,AnsData,ans[MAXN],_next[MAXN];bool used[MAXN];void addline(int x,int y,int m){ line[m].next=_next[x],_next[x]=m; line[m].x=x,line[m].y=y; return;}int dfs(int x){ int MaxSub=0,num=0,t,k; k=_next[x]; while (k) { if (!used[line[k].y]) { used[line[k].y]=true; t=dfs(line[k].y); MaxSub=max(t,MaxSub); num+=t; used[line[k].y]=false; } k=line[k].next; } MaxSub=max(MaxSub,n-(num+1)); if (MaxSub==AnsData) ans[++AnsNum]=x; else if (MaxSub<AnsData) { AnsData=MaxSub; AnsNum=0,ans[++AnsNum]=x; } return num+1;}int main(){ int i,num; while (~scanf("%d",&n)) { memset(_next,0,sizeof(_next)); for (i=1;i<n;i++) { int x,y; scanf("%d%d",&x,&y); addline(x,y,i*2-1); addline(y,x,i*2); } memset(used,false,sizeof(used)); AnsData=oo; used[1]=true; dfs(1); sort(ans+1,ans+1+AnsNum); printf("%d",ans[1]); for (i=2;i<=AnsNum;i++) printf(" %d",ans[i]); printf("\n"); } return 0;}
- POJ 3107 - Godfather 树形DP..vector慎用...
- POJ 3107 Godfather(树形dp)
- Godfather - POJ 3107 树形dp
- POJ 3107 Godfather (树形DP)
- poj 3107 Godfather (树形dp)
- 【POJ】3107 Godfather 树形dp
- poj 3107 Godfather(树形dp)
- (简单) 树形dp POJ 3107 Godfather
- POJ 3107 Godfather (水题,树形DP)
- POJ 3107 Godfather(树形DP)
- POJ 3107 Godfather(树形DP)
- poj 3107 Godfather(树形DP)
- poj 3107 Godfather(树形dp)
- poj 3170 Godfather(树形dp)
- poj 3107 Godfather(树形dp,树的重心)
- POJ.3107 Godfather (树形DP 树的重心)
- 【树形dp】PKU-3107-Godfather
- 【树形dp+前向星】Godfather POJ
- 我的163博客
- struts2安全漏洞及解决办法
- 砖3补 GIT常用命令
- poj 3169——Layout
- html显示未上传图片
- POJ 3107 - Godfather 树形DP..vector慎用...
- Ubuntu下crontab命令的用法
- 利用Android传感器开发水平仪
- 【转载】使用Xcode和Instruments调试解决iOS内存泄露
- struts2与struts1的不同之处
- JBoss技术支持文档
- 三种算法求解一个数组的子数组最大和
- 上次一个朋友问我java的反射,由于好久没接触楞了一下。无聊时用了反射做了一个小测试
- VC PlaySound