hdu2196 树的直径 + bfs
//Accepted 740 KB 15 ms //树的直径 //距离一个顶点最远的点一定是树的直径的一个端点 #include <cstdio> #include <cstring> #include <queue> #include <iostream> using namespace std; ; int dis[imax_n]; int d1[imax_n]; int d2[imax_n]; int head[imax_n]; *imax_n]; int e; struct node { int u,v,c; node() { } node(int u,int v,int c) { this->u=u; this->v=v; this->c=c; } }p[*imax_n]; int n; void addEdge(int u,int v,int c) { p[e]=node(u,v,c); next[e]=head[u]; head[u]=e++; } void init() { memset(head,-,sizeof(head)); memset(next,-,sizeof(next)); e=; } void read() { init(); int x,y; ;i<=n;i++) { scanf("%d%d",&x,&y); addEdge(i,x,y); addEdge(x,i,y); } } int max(int a,int b) { return a>b?a:b; } queue<int >q; bool vis[imax_n]; int bfs(int s) { //printf("111111\n"); memset(dis,,sizeof(dis)); ; int temp_node; while (!q.empty()) q.pop(); memset(vis,,])*(n+)); q.push(s); vis[s]=; while (!q.empty()) { int x=q.front(); if (dis[x]>ans) { ans=dis[x]; temp_node=x; } q.pop(); ;i=next[i]) { int y=p[i].v; if (!vis[y]) { vis[y]=; q.push(y); if (dis[x]+p[i].c>dis[y]) dis[y]=dis[x]+p[i].c; } } } return temp_node; } int main() { while (scanf("%d",&n)!=EOF) { read(); ); x=bfs(x); memcpy(d1,dis,sizeof(dis)); bfs(x); memcpy(d2,dis,sizeof(dis)); ;i<=n;i++) { printf("%d\n",max(d1[i],d2[i])); } } ; }
hdu2196 树的直径 + bfs的更多相关文章
- poj2631 树的直径 + bfs
//Accepted 492 KB 0 ms //树的直径 bfs #include <cstdio> #include <cstring> #include <iost ...
- 树上选两点(使最短)树的直径+bfs
题意: 给你一颗树,让你放两个点,放在哪里的时候任意点到某个最近的消防站最远值最小. 思路: 树的直径类题目. 首先我们想两个点会把整棵树分成两个团,所以肯定会在树的某个链上切开. 而且要切一定切在树 ...
- ZOJ 3820 Building Fire Stations 求中点+树的直径+BFS
题意:给一棵树,要求找出两个点,使得所有点到这两个点中距离与自己较近的一个点的距离的最大值(所有点的结果取最大的值,即最远距离)最小. 意思应该都能明白. 解法:考虑将这棵树摆直如下: 那么我们可以把 ...
- luogu P3761 [TJOI2017]城市 树的直径 bfs
LINK:城市 谢邀,学弟说的一道毒瘤题. 没有真正的省选题目毒瘤 或者说 写O(n)的做法确实毒瘤. 这里给一个花20min就写完的非常好写的暴力. 容易想到枚举哪条边删掉 删掉之后考虑在哪两个点上 ...
- POJ1985 树的直径(BFS
Cow Marathon Description After hearing about the epidemic of obesity in the USA, Farmer John wants ...
- 树的直径(BFS)
][];];];];,,;vis[i]=; ; j <= n ; j++){ ){;//标记 res[j]=res[root]+; ; i <= n- ; i++){; data[b][a ...
- [USACO2004][poj1985]Cow Marathon(2次bfs求树的直径)
http://poj.org/problem?id=1985 题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长) 分析: 1.树形dp:只要考虑根节点和子节点的关系就可以了 2.两次bfs: ...
- 4612 warm up tarjan+bfs求树的直径(重边的强连通通分量)忘了写了,今天总结想起来了。
问加一条边,最少可以剩下几个桥. 先双连通分量缩点,形成一颗树,然后求树的直径,就是减少的桥. 本题要处理重边的情况. 如果本来就两条重边,不能算是桥. 还会爆栈,只能C++交,手动加栈了 别人都是用 ...
- HDU4612+Tarjan缩点+BFS求树的直径
tarjan+缩点+树的直径题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少.先tarjan缩点,再在这棵树上求直径.加的边即是连接这条直径的两端. /* tarjan ...
随机推荐
- semantic-ui dropdown is not a function
按照semantic-ui官网示例,编写了如下示例,却不见效果. <div class="ui secondary menu"> <a class="i ...
- java 抽象类
抽象类: 1)函数没有方法体,就必须用abstract修饰. 2)抽象函数所在的类必须也是抽象的. 3)非抽象的类继承于抽象类,必须实现其全部方法. 4)抽象类中可以存在抽象方法,也可以不存在. 5) ...
- OneProxy与其它数据库中间件的对比
OneProxy 优点 性能 缺点 闭源,被商业公司掌控,到时候随别人蹂躏 可维护性极差,缺乏友好的出错信息,光维护这个环节就被他人掌控 定价不明 有没有这样的公司? 大到10wtps,但是没人能理解 ...
- HDUOJ----2485 Destroying the bus stations(2008北京现场赛A题)
Destroying the bus stations ...
- FG函数模块
ALDB: ABAP/4上的逻辑数据库 选择屏幕的修改更新 BUBA_4: ...
- UI-popup
做CRM有些时间了,可是对于UI却接触的不是很多,不过感觉UI和DYNPRO差不多...很类似的,...呵呵.加油吧! LV_TITLE = TEXT-T07.”POPUP TITLE LV_PO ...
- uva 242
242 - Stamps and Envelope Size Time limit: 3.000 seconds Stamps and Envelope Size Philatelists hav ...
- js 面试题
1.用原生js,创建一个无序列表添加到body中,ul下包含5个li,每个li包含一个text类型元素,text元素内容可自定义: <script type="text/javascr ...
- 转载 浅谈C/C++中的static和extern关键字
浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...
- 让Windows下的Tomcat将控制台信息记录到日志
在开发的过程中经常出现包冲突,却不知道怎么回事,可以在 catalina.bat 里面设置查看class加载日志 set CATALINA_OPTS=-server -Xdebug -Xnoage ...