博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu4607树的直径,spfa
阅读量:4624 次
发布时间:2019-06-09

本文共 1034 字,大约阅读时间需要 3 分钟。

链接:

题意:前一阵子做的,题意忘记了,大体就是求树的直径,就是树的最长路的长度。

思路:树的直径有这么一个算法,从树上任意一点出发,找一条最长路,终点为A,再从A点出来,找一条最长路,终点为B,那么树的直径就是AB的长度。求最长路可用dfs或者spfa来写。

#include
#include
#include
#include
#include
using namespace std;const int maxn=100000+5;const int INF=0x3f3f3f3f;//不能随便写,不然后面的memset出错int n,m;vector
list[maxn];queue
q;int dis[maxn];int inq[maxn];void spfa(int p){ int u; memset(dis,0x3f,sizeof(dis)); memset(inq,0,sizeof(inq));//for(int i=0;i<=n;i++)//{// dis[i]=INF;// inq[i]=0;//} dis[p]=0;inq[p]++; q.push(p); while(!q.empty()) { u=q.front(); q.pop();inq[u]--;//因为某个点可能重复入队,所以出队的时候也要标记,和bfs不同,bfs只用入队标记,因为只入队一次 for(int i=0;i
dis[p]) p=i; spfa(p); for(int i=2;i<=n;i++) if(dis[i]>dis[p]) p=i; p=dis[p];// while(m--) { scanf("%d",&k); if(k<=p+1) printf("%d\n",k-1); else printf("%d\n",(k-p-1)*2+p); } } return 0;}

 

 

转载于:https://www.cnblogs.com/54zyq/p/3271310.html

你可能感兴趣的文章
ANDROID开发之SQLite详解
查看>>
如何依靠代码提高网络性能
查看>>
Zookeeper要安装在奇数个节点,但是为什么?
查看>>
discuz 微社区安装记录
查看>>
[BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数
查看>>
配置的热更新
查看>>
MySQL事务的开启与提交,autocommit自动提交功能
查看>>
PriorityQueue
查看>>
CODEVS1403 新三国争霸
查看>>
iOS 环信离线推送
查看>>
WPFTookit Chart 高级进阶
查看>>
雷云Razer Synapse2.0使用测评 -第二次作业
查看>>
django上传文件
查看>>
CVPR2013-papers
查看>>
PHP之时间函数
查看>>
Python open()完整参数
查看>>
django里面DTL使用for循环时,获取当前循环次数使用{{forloop.counter}}
查看>>
Java基础——Java集合(二)
查看>>
详解如何让Android UI设计性能更高效
查看>>
使用KNN算法对鸢尾花数据集进行分类处理
查看>>