【HDU 2196】 Computer(树的直径)

题链http://acm.hdu.edu.cn/showproblem.php?pid=2196

这题可以用树形DP解决,自然也可以用最直观的方法解,先求出树的直径,那么树的任意节点的最远点必然是直径上的两个端点之一,证明可以通过反证法构造:

设端点为a,b;设任意点为i,假设存在一点c到i的距离大鱼i到a,b的距离,那么a与c又能形成一个距离更长的点对,与ab是直径的假设不符,因此不存在c,证明完成。

#include <queue>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <vector>
#define ll long long
#define inf 10000000000000
#define mod 1000000007
using namespace std;
ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
const int N=1e4+10;
const int M=2e4+10;
struct Edge{
int cost,to,nxt;
}Path[M];
int last[N],cnt;
void Addedge(int u,int v,int w){
Path[cnt]=(Edge){w,v,last[u]};
last[u]=cnt++;
}
int q[N*2],d[N],X;
void bfs(int x)
{
X=0;
int head=0,tail=1;
q[0]=x;
memset(d,0,sizeof(d));
d[x]=1;
while(head!=tail){
int cur=q[head];
head++;
if(d[cur]>d[X]) X=cur;
for(int i=last[cur];i;i=Path[i].nxt){
int v=Path[i].to;
if(!d[v]&&v!=x){
d[v]=d[cur]+Path[i].cost;
q[tail++]=v;
}
}
}
}
void Init()
{
memset(last,0,sizeof(last));
cnt=1;
}
int d2[N];
int main()
{
int n;
while(~scanf("%d",&n)){
Init();
for(int v=2;v<=n;v++){
int u=read(),w=read();
Addedge(u,v,w);
Addedge(v,u,w);
}
bfs(1);int ans1=X;
bfs(X);int ans2=X;
for(int i=1;i<=n;i++) d2[i]=d[i]-1;
bfs(X);
for(int i=1;i<=n;i++){
printf("%d\n",max(d[i]-1,d2[i]));
}
}
return 0;
}

最新文章

  1. List.Sort用法
  2. .Net内存泄露原因及解决办法
  3. python __setattr__, __getattr__, __delattr__, __call__
  4. apiCloud结合layer实现动态数据弹出层
  5. Linux常用命令之sed
  6. 从Python传递JSON到JavaScript
  7. java.util.Map按照key值合并的value的Collection 集合中。
  8. BZOJ1621: [Usaco2008 Open]Roads Around The Farm分岔路口
  9. 2017JAVA课程设计
  10. 《前端之路》之三 数组的属性 &amp;&amp; 操作方法(下)
  11. 算法笔记--Splay &amp;&amp; Link-Cut-Tree
  12. ListView点击事件失效(item里面有button按钮控件)解决方法
  13. vue教程3-02 vue动画
  14. LeetCode题解之Find All Duplicates in an Array
  15. 程序媛计划——python初级课时3~5
  16. 【原】SPARK_MEM和SPARK_WORKER_MEMORY的区别
  17. mysql千万级表关联优化(2)
  18. restframework中的那些参数你知道吗?
  19. DDD精彩
  20. Swift教程之运算符

热门文章

  1. 用jdbc连接数据库并简单执行SQL语句
  2. Spring Json数据
  3. cmdb客户端服务器信息采集一
  4. 数据结构 - 动态单链表的实行(C语言)
  5. Oracle中的日期数据类型
  6. AJPFX关于构造器的总结
  7. 11 DOM基础
  8. vue-webpack所构建好的项目中增加Eslint
  9. C# 方法 虚方法的调用浅谈 引用kdalan的博文
  10. PostgreSQL 数据库错误状态编号解释[附带列表