POJ 1985.Cow Marathon(DFS求树的直径模板题)
两次BFS/DFS求树的直径
我们可以先从任意一点开始DFS,记录下当前点所能到达的最远距离,这个点为P。
在从P开始DFS记录下所能达到的最远点的距离,这个点为Q。
\(P , Q\)就是直径的端点,\(d i s ( P , Q )\)就是直径。
具体代码见下题
题意:有N个农田以及M条路,给出M条路的长度以及路的方向(这道题不影响,用不到),让你找到一条 两农田(任意的)间的路径,使得距离最长,并输出最长距离。
这里用dfs求直径,当然也可以用bfs和树形DP来做。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define over(i,s,t) for(register int i = s;i <= t;++i)
#define lver(i,t,s) for(register int i = t;i >= s;--i)
using namespace std;
const int N = 5e5 + 7;
const int M = 2007;
int head[N], ver[N], tot, edge[N], nex[N];
int n, m, ans;
int dis[N], vis[N];
inline void add(int u, int v, int w) {
ver[++tot] = v;
edge[tot] = w;
nex[tot] = head[u];
head[u] = tot;
}
//两次dfs一次求P一次求Q
void dfs(int u, int& ed) {
if (dis[u] > ans)ans = dis[u], ed = u;
vis[u] = 1;
for (int i = head[u]; ~i; i = nex[i]) {
int v = ver[i], w = edge[i];
if (vis[v])continue;
dis[v] = dis[u] + w;
dfs(v, ed);
}
return;
}
int p, q;
void solve() {
dfs(1, p);//第一遍DFS求当下点能达到的最大距离
ans = dis[p] = 0;
memset(vis, 0, sizeof vis);
dfs(p, q);//第二遍DFS求从p开始能达到的最远距离
//p,q的距离就是最大距离了,即 ans
cout << ans << endl;
}
int main()
{
while (scanf("%d%d", &n, &m) != EOF) {
memset(head, -1, sizeof head);
memset(vis, 0, sizeof vis);
memset(dis, 0, sizeof dis);
tot = 0;
over(i, 1, m) {
int u, v, w;
char ch[2];
scanf("%d%d%d%s", &u, &v, &w, ch);
add(u, v, w);
add(v, u, w);
}
solve();
}
return 0;
}
POJ 1985.Cow Marathon(DFS求树的直径模板题)的更多相关文章
- poj:1985:Cow Marathon(求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5496 Accepted: 2685 Case ...
- 题解报告:poj 1985 Cow Marathon(求树的直径)
Description After hearing about the epidemic of obesity in the USA, Farmer John wants his cows to ge ...
- POJ 1985 Cow Marathon (求树的直径)
Description After hearing about the epidemic of obesity in the USA, Farmer John wants his cows to ge ...
- poj1985 Cow Marathon (求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3195 Accepted: 1596 Case ...
- POJ 1985 Cow Marathon (模板题)(树的直径)
<题目链接> 题目大意: 给定一颗树,求出树的直径. 解题分析:树的直径模板题,以下程序分别用树形DP和两次BFS来求解. 树形DP: #include <cstdio> #i ...
- poj 1985 Cow Marathon【树的直径裸题】
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 4185 Accepted: 2118 Case ...
- POJ 1985 Cow Marathon【树的直径】
题目大意:给你一棵树,要你求树的直径的长度 思路:随便找个点bfs出最长的点,那个点一定是一条直径的起点,再从那个点BFS出最长点即可 以下研究了半天才敢交,1.这题的输入格式遵照poj1984,其实 ...
- poj 1985 Cow Marathon
题目连接 http://poj.org/problem?id=1985 Cow Marathon Description After hearing about the epidemic of obe ...
- poj2631 求树的直径裸题
题目链接:http://poj.org/problem?id=2631 题意:给出一棵树的两边结点以及权重,就这条路上的最长路. 思路:求实求树的直径. 这里给出树的直径的证明: 主要是利用了反证法: ...
- POJ 1985 Cow Marathon && POJ 1849 Two(树的直径)
树的直径:树上的最长简单路径. 求解的方法是bfs或者dfs.先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一 ...
随机推荐
- GMAC网卡Fixed-Link模式
GMAC网卡Fixed-Link模式 GMAC fixed-link固定链接模式,mac与对端的连接方式是写死的,通常用于mac to mac(不排除mac to phy的情况).内核要支持fixed ...
- Vue05-Vuex
01. 什么是状态管理 在开发中,我们的应用程序需要处理各种各样的数据,这些数据需要保存在我们应用程序的某一个位置,对于这些数据的管理我们就称之为 状态管理. 在Vue开发中,我们使用组件化的开发方式 ...
- 前端解析excel表格
需求如下: 前端拿到表格中的数据,对数据做以下判断,并将拿到的数据转换成以下json格式,传给后端. 具体实现: 下载npm包:npm install xlsx --save 在vue文件中引入依赖: ...
- 【封装】二维BIT
struct BIT{ #define maxn 1000 int n, m; int d1[maxn][maxn], d2[maxn][maxn], d3[maxn][maxn], d4[maxn] ...
- 用dbeaver创建一个enum类型,并讲述一部分,mysql的enum类型的知识
写这个博客的目的就是我在网上看了半天,发现没有这方面的知识,也许是老手认为这个太简单了,不过我还是告诉新人使用dbeaver来创建一个enum类型的方法: 就是enum("a",& ...
- MySQL笔记01: MySQL入门_1.2 MySQL下载安装与配置
2.2 MySQL下载安装与配置 2.2.1 MySQL下载 MySQL中文官网:https://www.mysql.com/cn/ MySQL英文官网:https://www.mysql.com/ ...
- Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same(解决)
问题描述 在使用pytorch训练经典的MNIST数据集时,运行时,出现了以下的问题: Input type (torch.FloatTensor) and weight type (torch.cu ...
- 【内核】kernel 热升级-1:kexec 机制
内核热升级是指,预先准备好需要升级的内核镜像文件,在秒级时间内,完成内核切换,追求用户服务进程无感知. 欧拉操作系统提供了一套比较成熟的解决方案,该解决方案提供了用户态程序和内核态程序两部分: kex ...
- 确定了-C#是2023年度的编程语言!
大家好,我是沙漠尽头的狼.在朋友圈看到桂素伟大佬发的喜讯截图,站长赶紧翻译向大家报喜,确定了-C#是2023年度的编程语言! 在TIOBE指数的历史上,C#首次获得了年度编程语言的奖项.祝贺!二十多年 ...
- kafka源码阅读之MacBook Pro M1搭建Kafka2.7版本源码运行环境
原创/朱季谦 最近在阅读Kafka的源码,想可以在阅读过程当中,在代码写一些注释,便决定将源码部署到本地运行. 日常开发过程中,用得比较多一个版本是Kafka2.7版本,故而在MacBook Pro笔 ...