[NOIP 2007] 树网的核
[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=1999
[算法]
树的直径 + 单调队列
[代码]
#include<bits/stdc++.h>
using namespace std;
#define MAXN 500010
const int INF = 2e9; int i,n,s,ans,head,tail,m,t,tot,u,v,w,l,r;
int pre[MAXN],dis[MAXN],h[MAXN],f[MAXN],mx[MAXN],q[MAXN];
bool visited[MAXN]; struct edge
{
int to,w,nxt;
} e[MAXN << ];
vector< pair<int,int> > path; inline void addedge(int u,int v,int w)
{
tot++;
e[tot] = (edge){v,w,h[u]};
h[u] = tot;
}
inline int bfs(int s)
{
int i,cur,v,w,m;
queue< int > q;
q.push(s);
dis[s] = ;
pre[s] = ;
while (!q.empty())
{
cur = q.front();
q.pop();
for (i = h[cur]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
if (!dis[v] && v != s)
{
dis[v] = dis[cur] + w;
q.push(v);
pre[v] = cur;
}
}
}
m = ;
for (i = ; i <= n; i++)
{
if (dis[i] > dis[m])
m = i;
}
return m;
}
inline void bfsII(int s)
{
int i,cur,v,w;
queue< int > q;
q.push(s);
while (!q.empty())
{
cur = q.front();
q.pop();
for (i = h[cur]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
if (!visited[v] && !f[v])
{
visited[v] = true;
f[v] = f[cur] + w;
mx[s] = max(mx[s],f[v]);
q.push(v);
}
}
}
}
int main()
{ scanf("%d%d",&n,&m);
for (i = ; i < n; i++)
{
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
s = bfs();
memset(dis,,sizeof(dis));
t = bfs(s);
for (i = t; i; i = pre[i]) visited[i] = true;
for (i = t; i; i = pre[i]) bfsII(i);
q[] = t;
l = r = t;
head = tail = ;
ans = INF;
for (l = t; l; l = pre[l])
{
while (pre[r] && dis[l] - dis[pre[r]] <= m)
{
r = pre[r];
while (head <= tail && mx[q[tail]] <= mx[r]) tail--;
q[++tail] = r;
ans = min(ans,max(mx[q[head]],max(dis[r] - dis[s],dis[t] - dis[l])));
}
if (q[head] == l) head++;
}
printf("%d\n",ans); return ; }
[NOIP 2007] 树网的核的更多相关文章
- NOIP 2007树网的核
题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...
- 树网的核 2007年NOIP全国联赛提高组(floyed)
树网的核 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description [问题描述]设 T= ...
- noip2007 树网的核
P1099 树网的核 112通过 221提交 题目提供者该用户不存在 标签动态规划树形结构2007NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 设T=(V, E, W) ...
- 洛谷 P1099 树网的核
P1099 树网的核 题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W ...
- [NOIP2007] 提高组 洛谷P1099 树网的核
题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...
- 洛谷1099 [NOIP2007] 树网的核
链接https://www.luogu.org/problemnew/show/P1099 题目描述 设T=(V,E,W)是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称TTT为 ...
- [bzoj1999]树网的核
从下午坑到网上..noip的数据太弱,若干的地方写挂结果还随便过= = 最坑的就是网上有些题解没考虑周全... 第一步是找直径,用两次bfs(或者dfs,Linux下系统栈挺大的..)解决.找出其中一 ...
- BZOJ1999或洛谷1099&BZOJ2282或洛谷2491 树网的核&[SDOI2011]消防
一道树的直径 树网的核 BZOJ原题链接 树网的核 洛谷原题链接 消防 BZOJ原题链接 消防 洛谷原题链接 一份代码四倍经验,爽 显然要先随便找一条直径,然后直接枚举核的两个端点,对每一次枚举的核遍 ...
- BZOJ1999 树网的核[数据加强版]
1999: [Noip2007]Core树网的核 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1214 Solved: 336[Submit][St ...
随机推荐
- C# 多线程系列(一)
线程是怎样工作的 1.多线程由一个线程调度器来进行内部管理,一个功能是CLR常常委托给操做系统. 一个线程调度器确保所有激活的线程在执行期间被合适的分配,等待或者阻塞的线程(比如,一个独占锁或者等待用 ...
- Centos6.6 安装Memcached
一.环境介绍 1)Centos6.4 2) memcached-1.4.24 二.部署安装 计划具体部署步骤: 步骤1:安装 步骤2:配置 步骤3:运行 步骤4:检查 现在开始: 1)安装 $ yum ...
- 浅谈Overload和Override的区别
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding).如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Over ...
- 微信小程序播放背景音乐
小程序实现和h5一样的音乐图标一直旋转. 一..js中封装旋转动画方法 添加animation属性 data:{ animation:''" } 改变animation的值(官网提供角度范围 ...
- ApplicationLoader登录失败
报错:Please sign in with an app-specific password. You can create one at appleid.apple.com 是因为帐号开启了双重认 ...
- HTML 5语义化标签
HTML 5的革新之一:语义化标签一节元素标签. 在HTML 5出来之前,我们用div来表示页面章节,但是这些div都没有实际意义.(即使我们用css样式的id和class形容这块内容的意义).这些标 ...
- Android 性能测试初探(二)
书接前文 Android 性能测试初探(一).上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试). 首先我们来说说启动时间.关于应用的启动 ...
- 【JavaScript游戏开发】使用HTML5+Canvas+JavaScript 封装的一个超级马里奥游戏(包含源码)
这个游戏基本上是建立在JavaScript模块化的开发基础上进行封装的,对游戏里面需要使用到的游戏场景进行了封装,分别实现了Game,Sprite,enemy,player, base,Animati ...
- HDU 1241 Oil Deposits (DFS or BFS)
链接 : Here! 思路 : 搜索判断连通块个数, 所以 $DFS$ 或则 $BFS$ 都行喽...., 首先记录一下整个地图中所有$Oil$的个数, 然后遍历整个地图, 从油田开始搜索它所能连通多 ...
- idea整合eclipse后快捷键