BZOJ1509 NOI2003 逃学的小孩
Description:
Input:
第一行是两个整数N(3 N 200000)和M,分别表示居住点总数和街道总数。以下M行,每行给出一条街道的信息。第i+1行包含整数Ui、Vi、Ti(1Ui, Vi N,1 Ti 1000000000),表示街道i连接居住点Ui和Vi,并且经过街道i需花费Ti分钟。街道信息不会重复给出。
Output:
仅包含整数T,即最坏情况下Chris的父母需要花费T分钟才能找到Chris。
思路:由于规则2,可知题目给出的是一棵树
然后求一根直径,两个家就在直径两端
两端各遍历一发,就可以知道每个点到两端的距离,然后取出每个点到两端的最小距离再加上直径长度即可
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- #include<queue>
- using namespace std;
- const int N = 1e6 + ;
- int head[N], now;
- struct edges{
- int to, next, w;
- }edge[N<<];
- void add(int u, int v, int w){ edge[++now] = {v, head[u], w}; head[u] = now;}
- long long n, m, d[N], l, r, f[N];
- int bfs(int x){
- queue<int> q;
- memset(d, 0x3f, sizeof(d));
- q.push(x); d[x] = ;
- while(!q.empty()){
- int x = q.front(); q.pop();
- for(int i = head[x]; i; i = edge[i].next){
- int v = edge[i].to;
- if(d[v] > d[x] + edge[i].w){
- d[v] = d[x] + edge[i].w;
- q.push(v);
- }
- }
- }
- for(int i = ; i <= n; i++)
- if(d[i] > d[x]) x = i;
- return x;
- }
- int main(){
- scanf("%lld%lld",&n, &m);
- int x, y, z;
- for(int i = ; i <= m; i++){
- scanf("%d%d%d",&x, &y, &z);
- add(x, y, z); add(y, x, z);
- }
- l = bfs();
- r = bfs(l);
- memcpy(f, d, sizeof(d));
- bfs(r);
- long long mx = ;
- for(int i = ; i <= n; i++)
- mx = max(mx, min(d[i], f[i])+ f[r]);
- printf("%lld\n", mx);
- return ;
- }
BZOJ1509 NOI2003 逃学的小孩的更多相关文章
- BZOJ1509 [NOI2003]逃学的小孩 树型DP
题目: 分析: 首先明确我们是要求 min(dist[C][A],dist[C][B])+dist[A][B]. 我们把C当成树根,第一我们可以发现min里面取dist[C][A]或者dist[C][ ...
- BZOJ1509: [NOI2003]逃学的小孩(树的直径)
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1126 Solved: 567[Submit][Status][Discuss] Description ...
- BZOJ1509: [NOI2003]逃学的小孩 (树形DP)
题意:给一棵树 选三个点A,B,C 求A到B的再从B到C的距离最大值 需要满足AB的距离小于AC的距离 题解:首先树上的最大距离就想到了直径 但是被样例误导了TAT BC两点构成了直径 我一开始以为A ...
- 【BZOJ1509】[NOI2003]逃学的小孩 直径
[BZOJ1509][NOI2003]逃学的小孩 Description Input 第一行是两个整数N(3 N 200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的 ...
- BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )
树形dp求出某个点的最长3条链a,b,c(a>=b>=c), 然后以这个点为交点的最优解一定是a+2b+c.好像还有一种做法是求出树的直径然后乱搞... ----------------- ...
- [NOI2003]逃学的小孩(树的直径)
[NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听 ...
- BZOJ1509 & 洛谷4408:[NOI2003]逃学的小孩——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1509 https://www.luogu.org/problemnew/show/P4408 sb ...
- [NOI2003]逃学的小孩【观察+树的直径】
Online Judge:Bzoj1509,Luogu P4408 Label:观察,树的直径 题目描述 输入 第一行是两个整数N(\(3≤N≤200000\))和M,分别表示居住点总数和街道总数.以 ...
- 洛谷 P4408 [NOI2003]逃学的小孩
题目传送门 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:“喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?”一听说要考试,Chris的父母就心急如焚, ...
随机推荐
- 深度学习笔记 (二) 在TensorFlow上训练一个多层卷积神经网络
上一篇笔记主要介绍了卷积神经网络相关的基础知识.在本篇笔记中,将参考TensorFlow官方文档使用mnist数据集,在TensorFlow上训练一个多层卷积神经网络. 下载并导入mnist数据集 首 ...
- java.net.ProtocolException: Server redirected too many times
网页爬虫时,原来正常的代码,可能是因为网站做了cookie校验处理,报异常:java.net.ProtocolException: Server redirected too many times 表 ...
- js如何使浏览器允许脚本异步加载
js如何使浏览器允许脚本异步加载 如果脚本体积很大,下载和执行的时间就会很长,因此造成浏览器堵塞,用户会感觉到浏览器“卡死”了,没有任何响应.这显然是很不好的体验,所以浏览器允许脚本异步加载,下面就是 ...
- svn服务器 备份,迁移,部署方案
这次做业务迁移,要从一个云厂商迁移到某云厂商,之前每天到全备svn排到用场了,需要搭建一个全新到svn服务并要做迁移,并实现我们开发机到时时代码同步 一.svn备份有很多种,优劣都不同,百度可查,我采 ...
- 关于onclick和addeventlistener('click'),click的整理
代码 $(function(){ $("#btn").click(function(){ console.log(2) }) $("#btn").click(f ...
- “Hello world!”团队—团队选题展示(视频展示说明)
本次博客的主要内容基本分为以下两方面: 一.视频截图展示 二.视频简要说明 博客内容展示: 视频截图1: 简要说明:这是组长在视频前期简要介绍我们这款游戏项目的内容.从可行性和需求市场方面进行了简要阐 ...
- UCP协议
UDP只在ip数据报的服务上增加了一点功能,就是复用和分用还有差错检验的功能 (1)UDP是面向无连接:发送之前不需要建立连接,减少了时间延续 (2)UDP只是尽最大努力交付,不能保证无措 (3)UD ...
- iOS关于setContentOffset的一些细节问题
在UIScrollView,setContentOffset方法的功能是跳转到你指定内容的坐标, setContentOffset有两种方法:setContentOffset:和setContentO ...
- ssl证书验证的问题
对于https请求,是需要ssl证书验证的请求的,所以如果在请求时如果不带ssl证书,那么可以忽略证书的验证 有三种方法去实现: 1.Requests请求: 在文档中可以看到:http://docs. ...
- 团队组队&灰化肥挥发会发黑
1. 队伍展示 (1. 队名: 灰化肥挥发会发黑 (2. 队员风采 苏叶潇(队长) 201521123114 与众不同,擅长软件测试,对编程望而却步,希望成为测试人员. 宣言:不求最好,只求更好. 李 ...