【NOI2013】快餐店【基环树】【树的直径】【set】

传送门

题意:给一棵nnn个点的基环树,找一个点(可以在边上),求所有节点到这个点的最大值的最小值。

n≤1e5n \leq1e5n1e5

先考虑一棵普通树的情况

显然是直径长度的一半

因为如果有个点大于直径长度的一半,显然可以找一个更长的链,所以这个长度可以覆盖所有点。而如果小于,不能覆盖直径的端点。

如果是基环树,发现仍然可以按普通树的形式覆盖所有点。也就是断掉环上的一条边后的最小直径。

非环边是不受影响的,分别跑一次直径记录下来。

对每个环上的点记录最大深度,套路性地断环为链,set瞎搞一下就出来了

和前面的最大直径取max输出

复杂度O(nlogn)O(nlogn)O(nlogn)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <utility>
#include <set>
#define MAXN 100005
#define MAXM 200005
using namespace std;
typedef long long ll;
inline int read()
{int ans=0;char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans;
}
struct edge{int u,v,w;}e[MAXM];
int head[MAXN],nxt[MAXM],cnt;
void addnode(int u,int v,int w)
{e[++cnt]=(edge){u,v,w};nxt[cnt]=head[u];head[u]=cnt;
}
bool vis[MAXN],isrt[MAXN];
int lop[MAXN],x[MAXN],tot,tmp;
ll dep[MAXM];
void dfs(int u,int f)
{vis[u]=true;for (int i=head[u];i;i=nxt[i])if (!vis[e[i].v]&&e[i].v!=lop[1]){dfs(e[i].v,u);if (isrt[e[i].v]&&e[i].v!=tmp) isrt[lop[++tot]=u]=true,x[tot]=e[i].w;}elseif (e[i].v!=f&&e[i].v!=lop[1])isrt[lop[++tot]=u]=true,x[tot]=e[i].w,tmp=e[i].v;vis[u]=false;
}
ll dis[MAXN]={-1};
int mx;
void getdis(int u,int f)
{if (dis[u]>dis[mx]) mx=u;for (int i=head[u];i;i=nxt[i])if (e[i].v!=f&&!isrt[e[i].v]){dis[e[i].v]=dis[u]+e[i].w;getdis(e[i].v,u);}
}
typedef pair<ll,int> pi;
multiset<pi> s1,s2;//+,-
inline ll calc(){return s1.rbegin()->second==s2.rbegin()->second? max((++s1.rbegin())->first+s2.rbegin()->first,s1.rbegin()->first+(++s2.rbegin())->first):s1.rbegin()->first+s2.rbegin()->first;}
ll sum[MAXM];
int main()
{int n=read();for (int i=1;i<=n;i++){int u,v,w;u=read(),v=read(),w=read();addnode(u,v,w);addnode(v,u,w);}dfs(1,0);ll ans0=0;for (int i=1;i<=tot;i++){isrt[lop[i]]=false;mx=0;dis[lop[i]]=mx=0;getdis(lop[i],0);dep[i]=dis[mx];dis[mx]=0;getdis(mx,0);ans0=max(ans0,dis[mx]);isrt[lop[i]]=true;}for (int i=2;i<=tot;i++) sum[i]=sum[i-1]+x[i];for (int i=tot+1;i<=2*tot;i++) sum[i]=sum[i-1]+x[i-tot],dep[i]=dep[i-tot];ll ans1=1e18;for (int i=1;i<=tot;i++) s1.insert(make_pair(dep[i]+sum[i],i)),s2.insert(make_pair(dep[i]-sum[i],i));ans1=min(ans1,calc());for (int i=tot+1;i<=2*tot-1;i++){s1.erase(s1.find(make_pair(dep[i-tot]+sum[i-tot],i-tot)));s2.erase(s2.find(make_pair(dep[i-tot]-sum[i-tot],i-tot)));s1.insert(make_pair(dep[i]+sum[i],i));s2.insert(make_pair(dep[i]-sum[i],i));ans1=min(ans1,calc());}ans1=max(ans0,ans1);printf("%lld.%d\n",ans1>>1,(ans1&1)? 5:0);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #632 (Div. 2) F. Kate and imperfection 数论 + 贪心

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤5e5n\le5e5n≤5e5 思路&#xff1a; 首先有个显然的结论&#xff1a;当往集合中加入一个数xxx的时候&#xff0c;如果存在d∣xd|xd∣x且ddd不在集合中&#xff0c;那么加入ddd一定比加入xxx更优。 也就是…

.NET开发框架(二)-框架功能简述

本框架为响应式SPA框架&#xff0c;支持PC与手机端的屏幕自适应。手机展示效果视频在文章末尾查看。框架入口地址&#xff1a;http://letyouknow.net/1、框架登录界面&#xff0c;输入账号与密码&#xff0c;点击立即登录2、框架主界面&#xff0c;左-右结构&#xff0c;左边为…

杜教筛复杂度证明

我们实际上求的是这玩意 T(n)n∑i1n(T(i)T(ni))T(n)\sqrt{n}\sum_{i1}^{\sqrt{n}}(T(i)T(\frac{n}{i}))T(n)n​i1∑n​​(T(i)T(in​)) 我们只需要考虑 T(n)n∑i1n(ini)T(n)\sqrt{n}\sum_{i1}^{\sqrt{n}}(\sqrt i\sqrt\frac{n}{i})T(n)n​i1∑n​​(i​in​​) 对于之后的项&a…

Codeforces Round #632 (Div. 2) E. Road to 1600 构造好题

传送门 文章目录题意&#xff1a;思路题意&#xff1a; 直接白嫖 思路 首先不难发现&#xff0c;n≤2n\le2n≤2的时候是无解的。 现在我们来构造n3n3n3的情况&#xff0c;通过打表可以发现如下矩阵是符合题目要求的&#xff1a; 179325486\begin{array}{ccc} 1&7&9…

SiteServer CMS 新版本 V6.11(2019年7月1日发布)

欢迎来到 SiteServer CMS V6.11版本&#xff08;.NET CORE V7.0预览版本将推迟至2019年9月1日发布&#xff09;&#xff0c;经过两个月的连续迭代开发&#xff0c;V6.11 版本新增了采集插件以及多项BUG修复&#xff1a;SS.Gather 页面采集插件页面采集插件将在V6.11版本中正式提…

【NOI2016】循环之美【莫比乌斯反演】【整除分块】【杜教筛】【类杜教筛】

传送门 题意&#xff1a;给定n,m,kn,m,kn,m,k,求1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m时xyx \over yyx​中数值不同的纯循环小数或整数的个数。 n≤109,m≤109,k≤2103n \leq 10^9,m\leq10^9,k\leq2\times10^3n≤109,m≤109,k≤2103 显然只需要考虑最简…

P1020 [NOIP1999 普及组] 导弹拦截 Dilworth定理 + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 对于第一问直接输出最长不严格下降子序列即可&#xff0c;第二问是Dilworth定理&#xff0c;变形比较多&#xff0c;之前也写过类似的&#xff0c;这里贴个证明。 //#pragma GCC optimiz…

参数传递机制之JWT

1. 什么是 JWTJWT 其全称为&#xff1a;JSON Web Token&#xff0c;简单地说就是 JSON 在 Web 上的一种带签名的标记形式。官方的定义如下&#xff1a;JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.…

【NOI2009】诗人小G【决策单调性dp】

传送门 设句子加上空格长度前缀和为sss 转移方程为 fimin⁡1≤j<i{fj∣si−sj−L−1∣P}f_i\min_{1\leq j<i}\{f_j|s_i-s_j-L-1|^P\}fi​1≤j<imin​{fj​∣si​−sj​−L−1∣P} 不难发&#xff08;cai&#xff09;现&#xff08;chu&#xff09;决策具有单调性 …

Codeforces Round #709 (Div. 1) B. Playlist 链表维护 + bfs

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 紧跟刘爷脚步补题。 不难想到用链表维护下一个数是什么&#xff0c;这样就跟以前做过的一个题差不多了&#xff0c;首先将初始的时候删掉的点的前一个点即为题目中的AAA入队&#xff0c;让…

浅谈ASP.NET Core中IOC与DI的理解和使用

说起IOC和DI,使用过ASP.NET Core的人对这两个概念一定不陌生&#xff0c;早前&#xff0c;自己也有尝试过去了解这两个东西&#xff0c;但是一直觉得有点很难去理解&#xff0c;总觉得对其还是模糊不清&#xff0c;所以&#xff0c;趁着今天有空&#xff0c;就去把两个概念捋清…

Codeforces Round #715 (Div. 1) C. Complete the MST 补图 + 思维 + 最小生成树

传送门 文章目录题意&#xff1a;思路题意&#xff1a; 给你一张nnn个点mmm个边的图&#xff0c;mmm条边是给定的&#xff0c;要求你给未给定的边赋值一个边权&#xff0c;使得所有边权异或和为000&#xff0c;求所有满足这种情况的图中最小生成树边权和最小的&#xff0c;输出…

一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE

这是一个.net下操作数据库(结构数据库)的工具类&#xff0c;支持sqlserver、oracle、mysql、postgres、sqlite、access等常见数据库。注意&#xff1a;它并不是一个orm工具(常见的orm框架如&#xff1a;EF、Dapper等)。2.1 引入DBUtil依赖1. 首先打开vs(推荐vs2019)&#xff0c…

【NOI2012】迷失游乐园【概率期望】【换根dp】【基环树】

传送门 题意&#xff1a;给一棵nnn个点的带边权树或基环树&#xff0c;随机选一个点作为起点&#xff0c;每次随机走到一个相邻未走过的位置&#xff0c;直到无路可走。求期望路径长度。 n≤105n \leq 10^5n≤105,为基环树时环的大小不超过202020 先考虑树怎么做废话 先只考…

Educational Codeforces Round 37 (Rated for Div. 2) E. Connected Components? 暴力 + 补图的遍历

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5。 思路&#xff1a; 这是题是我上个题的一部分&#xff0c;算是个小知识点&#xff0c;暴力能过。 直接维护一个setsetset&#xff0c;让后遍历所有点&#xff…

初探System.Threading.Channels

。System.Threading.Channels是.Net Core基础类库中实现的一个多线程相关的库&#xff0c;专门处理数据流相关的操作&#xff0c;用来在生产者和订阅者之间传递数据&#xff08;不知道可不可以理解为线程间传递数据&#xff0c;我把它类比成了Go语言中的Channel&#xff09;&am…

【LOJ6033】棋盘游戏【二分图博弈】

传送门 显然是个二分图&#xff0c;设开始位置是左边&#xff0c;另一边是右边 那么先手是把左边挪到右边&#xff0c;后手是把右边挪到左边&#xff0c;不能挪的那方失败 结论&#xff1a;Alice必胜当且仅当开始位置不一定在最大匹配上 必要性&#xff1a; 如果开始位置不…

Codeforces Round #715 (Div. 1) B. Almost Sorted 找规律

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 找规律yydsyydsyyds。 一看没什么想法&#xff0c;所以打了个表&#xff0c;好家伙&#xff0c;不打不知道&#xff0c;一打不得了&#xff0c;下面是n6n6n6的符合要求的情况&#xff1a; …

SQL Server之索引解析(二)

、堆表堆表通过IAM连接一起&#xff0c;查询时全表扫描。1、1 非聚集索引结构叶子节点数据结构&#xff1a;行数据结构Rid&#xff08;8字节&#xff09;中间节点数据结构&#xff1a; &#xff08;非聚集非唯一索引&#xff09;行数据结构Page&#xff08;4&#xff09;2 Rid&…

【NOI2011】兔兔与蛋蛋的游戏【二分图博弈】

传送门 结论 不会有同一个棋子移动两次 反证法&#xff0c;对于第一个移动第二次的棋子 设两次移动之间(含)的移动的棋子为A1,A2,A3,……&#xff0c;AnA_1,A_2,A_3,……&#xff0c;A_nA1​,A2​,A3​,……&#xff0c;An​&#xff08;指棋子本身而非位置&#xff09; 因…