poj1985和poj1849(树的直径)
题目传送门:poj1985
树是连通无环图,树上任意两点之间的路径是唯一的。定义树上任 意两点u, v的距离为u到v路径上边权的和。树的直径MN为树上最长路 径,即点M和N是树上距离最远的两个点。
题目就是寻找树的直径的版子题,两次dfs(第一次遍历根节点所到达的最远距离x点,第二次dfs从x到达最远距离y,这个就是树的直径),或者树形dp,我这里用到了树形dp;
还要感谢石神对我的教导和更正,让我接触了树形dp;
但这个题的代码就不给出了,因为在下面一题的代码中会体现。。
题目:poj1849
所以这里我不仅给出题目的答案,我们也来讨论一下每一种情况;
假设只有1个机器人遍历树,且要求回到原点, 它最少需要走多少路?
2 × ∑wi。
若不用回到原点?
2 × ∑wi−(从出发点所能到达的最远距离)。即 沿着最远距离走,过程中每个分叉走两遍。
假设只有2个机器人遍历树,且要求回到原点, 它最少需要走多少 路?
2 ×∑wi。
若不用回到原点?
2 ×∑wi−(树的直径)。
这个题就是最后一种情况,
分析:考虑从一个结点遍历整个树再回到原点需要把每个边计算两遍,这 里机器人不用回到出发点,所以两个机器人到达的点越远越好。 要使路程最近,若起点在树的直径上,则两辆车往不同的方向走, 直径上的边只用走一遍,其他的要走两遍。 若起点不在直径上,则两人一起走到直径上,再往不同的方向走。 这样最优解就是所有边×2−直径,因为直径只走了一次,而其他边 必走两遍。
#include<algorithm>
#include<bitset>
#include<cctype>
#include<cerrno>
#include<clocale>
#include<cmath>
#include<complex>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<deque>
#include<exception>
#include<fstream>
#include<functional>
#include<limits>
#include<list>
#include<map>
#include<iomanip>
#include<ios>
#include<iosfwd>
#include<iostream>
#include<istream>
#include<ostream>
#include<queue>
#include<set>
#include<sstream>
#include<stack>
#include<stdexcept>
#include<streambuf>
#include<string>
#include<utility>
#include<vector>
#include<cwchar>
#include<cwctype>
using namespace std;
const int maxn=4e4+;
template<typename T>inline void read(T &x)
{
x=;
T f=,ch=getchar();
while (!isdigit(ch) && ch^'-') ch=getchar();
if (ch=='-') f=-, ch=getchar();
while (isdigit(ch)) x=(x<<)+(x<<)+(ch^), ch=getchar();
x*=f;
}
int n,m,a,b,c,point,tot,ans,sum;
int dis[],vis[],lin[];
struct gg {
int y,next,v;
}an[];
void add(int x,int y,int z) {
an[++tot].y=y;
an[tot].v=z;
an[tot].next=lin[x];
lin[x]=tot;
}
inline int dp(int x)
{
vis[x]=;
for(int i=lin[x];i;i=an[i].next)
{
int y=an[i].y;
if(vis[y]) continue;
dp(y);
ans=max(ans,dis[x]+dis[y]+an[i].v);
dis[x]=max(dis[x],dis[y]+an[i].v);
}
return ans;
}
int main()
{
int sum=;
read(n);read(m);
for(int i=;i<n;i++)
{
read(a),read(b),read(c);
add(a,b,c);
add(b,a,c);
sum+=c;
}
dp();
printf("%d\n",(sum<<)-ans);
return ;
}
poj1985和poj1849(树的直径)的更多相关文章
- poj1985 / poj2631(树的直径)
poj1985 Cow Marathon 树的直径裸题 树的直径的一般求法: 任意一点为起点,dfs/bfs找出与它最远的点$u$ 以$u$为起点,dfs/bfs找出与它最远的点$v$ 则$d(u,v ...
- 「日常训练&知识学习」树的直径(POJ-1849,Two)
题意 一个城市由节点和连接节点的街道组成,街道是双向的. 此刻大雪覆盖了这个城市,市长确定了一些街道要将它们清扫干净,这些街道保证所有的节点可以通过它们连通而且街道数目尽可能小. 现有两台相同的扫雪机 ...
- poj1985 Cow Marathon (求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3195 Accepted: 1596 Case ...
- [USACO2004][poj1985]Cow Marathon(2次bfs求树的直径)
http://poj.org/problem?id=1985 题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长) 分析: 1.树形dp:只要考虑根节点和子节点的关系就可以了 2.两次bfs: ...
- poj1849(求树的直径)
题目链接:http://poj.org/problem?id=1849 题意:有一颗n个结点的带权的无向树, 在s结点放两个机器人, 这两个机器人会把树的每条边都走一遍, 但是最后机器人不要求回到出发 ...
- poj1985&&第四次CCF软件认证第4题 求树的直径
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 4216 Accepted: 2137 Case ...
- [POJ1985] Cow Marathon 「树的直径」
>传送门< 题意:求树的直径 思路:就是道模板题,两遍dfs就求出来了 Code #include <cstdio> #include <iostream> #in ...
- D4 树的直径、重心以及基环树
第一题第二题鉴上我前几篇博客poj1985 poj1849:https://www.cnblogs.com/Tyouchie/p/10384379.html 第三题:数的重心:poj1655 来自sj ...
- POJ 树的直径和重心
树的直径:(无根)树上最长两点间的最长路径,两次dfs即可,第一次dfs任选一点u,找到距离它最远的点s,再从点s进行一次dfs,找到距离s最远的点t,则s-t之间的路径就是树的直径.证明: < ...
随机推荐
- 【转】Android 为什么 dp2px 或 px2dp 公式需要加 0.5f
转自:http://blog.csdn.net/changcsw/article/details/52440543 网上 dp2px 和 px2dp 公式: public static int px2 ...
- TTL是什么意思?
TTL是一个ip协议的值,它告诉网络,数据包在网络中的时间是否太长而应被丢弃.有很多原因使包在一定时间内不能被传递到目的地. TTL 的初值通常是系统缺省值,是包头中的8位的域.TTL的最初设想是确定 ...
- 2.node.js (二)服务器登录注册 与 包的发布
get: 不安全 小 2k 数据会在地址栏上显示 从服务器获取 快 post: 相对安全 https 大 1G 不会 向服务器发送 慢 get:直接解析url地址 借助 url模块 var urlOb ...
- Linux命令行下快捷键
快捷键 说明 Ctrl+a 切换到命令行开始 Ctrl+e 切换到命令行末尾 Ctrl+c 终止当前命令或脚本 Ctrl+d ①退出当前shell,相当于exit②一个个删除光标后字符 Ctrl+l ...
- (二)juc线程高级特性——CountDownLatch / Callable / Lock
5. CountDownLatch 闭锁 Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能. CountDownLatch 一个同步辅助类, ...
- ES6 数组方法拓展
ES6 数组方法拓展 1.Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括E ...
- js 限制输入框只能输入数字的问题
常规情况下,input设置为 type=‘number’ 可以避免汉字,字符,字母,空格的输入,但是不能避免小减号 以及小键盘的减号-,加号+的输入, 可以考虑 监控 输入框的oninput事件,方 ...
- GIS优秀博客以及网址收藏,持续更新
1.gislaozhang arcpy,模型构建器,arcpro 地址:https://blog.csdn.net/gislaozhang?t=1 2.雾语 arcpy,模型构建器,arcg ...
- React中redux表单编辑
reduxForm中反写数据在输入框中,数据是从别的模块拉取 // 编辑应用表单 class EditCode extends React.Component { constructor(props) ...
- Java项目引用外部jar包时,使用bat启动
1.将项目导出为jar包 1)点击项目—>右击—>点击Export—>进入export页面 2)点击JAR file——>Next——>勾选项目——>选择jar包存 ...