poj1985 Cow Marathon

树的直径裸题

树的直径的一般求法:

任意一点为起点,dfs/bfs找出与它最远的点$u$

以$u$为起点,dfs/bfs找出与它最远的点$v$

则$d(u,v)$是一条直径

下面给出poj1985的code(poj2631自行修改)

#include<iostream>
#include<cstdio>
#include<cstring>
#define re register
using namespace std;
int max(int &a,int &b){return a>b?a:b;}
#define N 50002
int n,m,k,ans,dis[N];
int cnt,hd[N],nxt[N<<],ed[N],poi[N<<],val[N<<];
void adde(int x,int y,int v){
nxt[ed[x]]=++cnt; hd[x]=hd[x]?hd[x]:cnt;
ed[x]=cnt; poi[cnt]=y; val[cnt]=v;
}
void dfs(int x,int fa){
if(dis[x]>dis[k]) k=x;
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(to==fa) continue;
dis[to]=dis[x]+val[i];
dfs(to,x);
}
}
int main(){
char c[]; int q1,q2,q3;
while(~scanf("%d%d",&n,&m)){
memset(hd,,sizeof(hd));
memset(ed,,sizeof(ed));
memset(nxt,,sizeof(nxt));
ans=cnt=k=;
for(re int i=;i<n;++i){
scanf("%d%d%d%s",&q1,&q2,&q3,c);
adde(q1,q2,q3); adde(q2,q1,q3);
}
dis[]=; dfs(,);
dis[k]=; dfs(k,);
for(re int i=;i<=n;++i) ans=max(ans,dis[i]);
printf("%d\n",ans);
}return ;
}

最新文章

  1. select 函数1
  2. C#中的属性太邪恶了
  3. 3.2---最小栈(CC150)
  4. JSTL标签库中&lt;c:choose&gt;&lt;/c:choose&gt;不能放JSP页面&lt;!-- --&gt;注释
  5. tomcat设置内存大小
  6. 检测Insert、Capslock、NumLock、ScrollLock状态键的状态
  7. poj 3415 Common Substrings 后缀数组+单调栈
  8. easyui源码翻译1.32--Tabs(选项卡)
  9. Objective-c单例模式详解
  10. python的import与from...import的不同之处
  11. CELL_PHOTO_IDENTIFIER
  12. python-查询员工信息表
  13. C#识别图片上的数字
  14. 第四弹:overfeat
  15. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
  16. eclipse中将项目打包成jar的两种方法,及其问题与解决方法
  17. IP地址分类(A类 B类 C类 D类 E类)
  18. django面试八
  19. MacOS 如何剪切文件
  20. Vcenter一次性将服务器四个网卡从端口组迁移到分布式交换机的方法

热门文章

  1. @synthesize obj=_obj的意义详解 @property和@synthesize
  2. 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)
  3. 从TCP三次握手说起--浅析TCP协议中的疑难杂症(1)
  4. 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
  5. 最舒适的路(并查集+枚举)(hdu1598)
  6. 解决pip install 安装慢问题
  7. yii2.0 如何按需加载并管理CSS样式及JS脚本
  8. TC/IP协议簇
  9. talib 中文文档(八): Momentum Indicator Functions 动量指标
  10. Flink简介及使用