题解:【XR-3】核心城市

思路一:考虑由特例推广到一般

1、很容易想到先考虑一个关键点的情况,然后再推广到一般情况。

2、一个点肯定选距离上最平衡的那个点,即树的中心。接着在中心周围贪心的选剩下的(k-1)个关键点即可。

3、这里有一个误区:

各点到某点的距离最小,是找树的中心而不是重心!!!

各点到某点的距离最小,是找树的中心而不是重心!!!

各点到某点的距离最小,是找树的中心而不是重心!!!

(树的重心:最小化 最大的子树大小;树的中心:最小化 各点到某点的距离,即树的直径的中点)

#include<bits/stdc++.h>
#define F(i,l,r) for(int i=l;i<=r;++i)
#define G(i,r,l) for(int i=r;i>=l;--i)
#define int long long
using namespace std;
char buf[100],*p1=buf,*p2=buf;
inline int gc(){return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100,stdin),p1==p2)?EOF:*p1++;}
inline int rd(){
int x=0; char ch; bool f=1;
while(!isdigit(ch=gc())) f^=(ch=='-');
do x=(x<<3)+(x<<1)+(ch^48); while(isdigit(ch=gc()));
return x;
}
const int N=1e5+5;
struct node{ int v,ne; }e[N<<1];
int first[N],dis[N],len[N],pre[N],a[N];
int n,idx=0,k,cx=0,mn=1000000000;
void add(int x,int y){ e[++idx]=(node){y,first[x]}; first[x]=idx;}
void go(int u,int f){
dis[u]=dis[f]+1; pre[u]=f;
if(dis[u]>dis[cx]) cx=u;
for(int i=first[u];i;i=e[i].ne) if(e[i].v!=f) go(e[i].v,u);
}
void dfs(int u,int f){
len[u]=1;
for(int i=first[u];i;i=e[i].ne){
int v=e[i].v; if(v==f) continue;
dfs(v,u);
len[u]=max(len[v]+1,len[u]);
}
}
signed main(){
n=rd(),k=rd(); int u,v;
F(i,1,n-1) u=rd(),v=rd(),add(u,v),add(v,u);
go(1,0);
dis[cx]=0;
go(cx,0);
int cnt=1,iii=(dis[cx]+1)/2;
while(cnt!=iii && pre[cx]) cx=pre[cx],++cnt;
dfs(cx,0);
sort(len+1,len+n+1);
printf("%lld",len[n-k]);
return 0;
}

思路二:考虑逆向思维

1、发现 “选k个关键点放入圈中” 等同于 “选(n-k)个非关键点出圈”

2、而由题可知,k个关键点是一个连通块,所以叶子结点是最先出圈的。由此确定,删点是从外而内一层层删

3、用topsort模拟删点的过程即可,由于是用广搜实现topsort,因此点是”一轮一轮删的“,删完(n-k)个点后到了第几轮,答案就是几。

代码可参考这位大佬的博客。

题解:【XR-3】核心城市的更多相关文章

  1. 解题报告:luogu P5536 【XR-3】核心城市

    题目链接:P5536 [XR-3]核心城市 这题是某次月赛题. 这题我完全是看标签猜的. 优先选择直径中点即可,这里重要的是互通,很容易想到用堆维护可选的,预处理直径和距叶节点距离即可(最近),实质上 ...

  2. 【XR-3】核心城市(树直径)

    [XR-3]核心城市 这题真的难啊......... k个核心城市太麻烦,我们假设先找一个核心城市,应该放在哪里? \(任意取一个点,它的最远端是直径的端点.\) \(所以当这个点是直径的中点时,可以 ...

  3. Comet OJ - Contest #9 & X Round 3 【XR-3】核心城市 【树的理解】

    一.题目 [XR-3]核心城市 二.分析 题意就是在树中确定$K$个点,满足剩下的$N-K$个点中到这$K$个点的最大距离尽可能小. 理解上肯定是确定一个根,这个根是这个图的中心. 可以通过根据结点的 ...

  4. LG5536 「XR-3」核心城市 树的直径

    问题描述 LG5536 题解 两次 \(\mathrm{dfs}\) 求树的直径. 然后找到树的直径的中点. 然后按照 子树中最深的点深度-自己深度 排序,贪心选取前 \(k\) 个. \(\math ...

  5. 城市平乱 ---- Dijkstra

    题解 : 以暴乱城市 为 源点 向所有点做最短路径 , 然后检查每个不对到暴乱城市的 最短距离 #include<stdio.h> #include<string.h> #in ...

  6. 8.9 NOIP模拟测试15 建设城市(city)+轰炸行动(bomb)+石头剪刀布(rps)

    鉴于T3的惨烈程度,我决定先来颓篇题解. T1 建设城市(city) 挡板法+容斥 m个建设队分成n组,每组必须有一个,先不考虑上限,共有 C(m-1,n-1)种方案. 有i个组是超过k个的,容斥掉 ...

  7. 2016亚洲城市GDP50强出炉

    2017年年1月,中国各省GDP排名,台湾排第6:广东,江苏,山东,浙江,河南,台湾,四川,湖北,河北,湖南,我国台湾地区去年的GDP增长率为1.4%,总量折合人民币约为37329.1亿元,加入全国榜 ...

  8. 微信小程序想要的是无法监测的流量dark social

    “微信小程序”将带来什么样的变化?就单单的是一个超级Web app?还是只是为了给大家手机节省一些空间?腾讯想要的是高达70%以上的“无法监测的巨大流量”,称之为“dark social”(暗社交). ...

  9. Educational Codeforces Round 15 C 二分

    C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  10. Educational Codeforces Round 15 Cellular Network

    Cellular Network 题意: 给n个城市,m个加油站,要让m个加油站都覆盖n个城市,求最小的加油范围r是多少. 题解: 枚举每个城市,二分查找最近的加油站,每次更新答案即可,注意二分的时候 ...

随机推荐

  1. 基于druid和spring的动态数据库以及读写分离 转

    spring与druid可以实现动态数据源,夸库查询,读写分离等功能.现在说一下配置: 1.需要配置多个spring数据源 spring-data.xml <!-- 动态数据源 --> & ...

  2. MPTCP(一) :MPTCP概览

    MPTCP概览 参考链接 MPTCP官网 http://multipath-tcp.org/ MPTCP入门 https://access.redhat.com/documentation/zh-cn ...

  3. 编译stvo-pl报错error: ‘random_device’ was not declared in this scope 解决方案

    近来在研究PL-SLAM时,由于要安装stvo-pl库,所以我下载安装了这个库.在编译阶段我遇到了一个让人头大的问题. 即红框标出的地方报错:error: 'random_device' was no ...

  4. Win32 sdk 下树形控件响应鼠标单击与双击,获得选中项的名称

    //窗口过程函数INT_PTR CALLBACK myWin::myWinDlgProc(HWND dlgHwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ...

  5. centos7.3离线安装和配置NFS

    概述 # NFS为 Network FileSystem 的简称,它的目的就是想让不同的机器.不同的操作系统可以彼此分享个别的档案啦! 目前在 Unix Like 当中用来做为文件服务器是相当不错的一 ...

  6. TwinCAT3 - 实现CiA402

    目录 1,起缘 2,想办法 3,开搞 3.1,CANOpen通信 3.1.1 对象字典 3.1.2 通信建立 3.2,CiA402伺服状态机 3.3,伺服运行 3.3.1 操作模式 3.3.2 轮廓位 ...

  7. 【Jmeter】之进行单接口批量压力测试

    目录: 一.安装Jmeter 二.接口压力测试 p.p1 { margin: 0; font: 14px ".PingFang SC"; color: rgba(17, 31, 4 ...

  8. python configparser 创建ini文件,动态读取与修改配置文件,以及保存与读取字符串与QColor类型的配置

    # 动态配置所需 from import ConfigParser # 获取系统语系所需 import locale # QColor 类型的传参所需 from PyQt6.QtGui import ...

  9. win10远程登录的账号密码

    win10有了一个windows hello,还有本地账号,还有microsoft账号 在 设置-账户信息 这里可以设置登录一个 Microsoft账号,然后远程登录的时候,用的是 Microsoft ...

  10. .net core 依赖注入,运行报错 Cannot consume scoped 'xxx' service from singleton 'yyy'

    这是因为 xxx 的生命周期是 AddScoped 注入的,而 yyy 的生命周期是 AddSingleton ,然后 yyy 这个单例的对象中,它又依赖了xxx 也就是说,单例注入的对象中依赖了 A ...