JZOJ 【NOIP2016提高A组集训第16场11.15】兔子
JZOJ 【NOIP2016提高A组集训第16场11.15】兔子
题目
Description
在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝。更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连。换句话讲,这些兔子窝之前的路径构成一张N个点、M条边的无向连通图,而度数大于2的点至多有1个。
兔子们决定把其中K个兔子窝扩建成临时避难所。当危险来临时,每只兔子均会同时前往距离它最近的避难所躲避,路程中花费的时间在数值上等于经过的路径条数。为了在最短的时间内让所有兔子脱离危险,请你安排一种建造避难所的方式,使最后一只到达避难所的兔子所花费的时间尽量少。
Input
第一行有3个整数N,M,K,分别表示兔子窝的个数、路径数、计划建造的避难所数。
接下来M行每行三个整数x,y,表示第x个兔子窝和第y个兔子窝之间有一条路径相连。任意两个兔子窝之间至多只有1条路径。
Output
一个整数,表示最后一只到达避难所的兔子花费的最短时间。
Sample Input
5 5 2
1 2
2 3
1 4
1 5
4 5
Sample Output
1
Data Constraint
对于30%的数据,N≤15,K≤4;
对于60%的数据,N≤100;
对于100%的数据,1≤K≤N≤1,000,1≤M≤1,500
Hint
在第2个和第5个兔子窝建造避难所,这样其它兔子窝的兔子最多只需要经过1条路径就可以到达某个避难所。
题解
图应该长成这样

就是一堆链和一堆环,中间那个点就是度数大于等于3的点
题目要求最优答案,想到二分
\(O(n)\)枚举一个必选的点,然后二分答案
从这个必选的点去搜索
把全部和必选点的距离小于当前的答案\(mid\)的全部打上标记
这是所有环都变成链,求出链长除以\(2*mid+1\)向上取整
最后判断,更新\(l,r\)
Code
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct node
{
int to,head,next;
}a[3001];
int n,m,k,x,y,tot,l,r,mid,ans,d[1001],dis[1001];
bool b[1001],bj[1001];
void add(int x,int y)
{
a[++tot].to=y;
a[tot].next=a[x].head;
a[x].head=tot;
}
int dfs(int now,int fa)
{
if (bj[now]) return -1;
if (b[now]) return 0;
int k=0;
bj[now]=true;
for (int i=a[now].head;i;i=a[i].next)
{
if (a[i].to==fa) continue;
int x=dfs(a[i].to,now);
k+=x+1;
}
return k;
}
bool judge(int one,int deep)
{
int sum=0,h=0,t=1;
memset(b,false,sizeof(b));
b[one]=true;
dis[one]=0;
d[1]=one;
while (h++<t)
for (int i=a[d[h]].head;i;i=a[i].next)
if (!b[a[i].to]&&dis[d[h]]<deep)
{
d[++t]=a[i].to;
b[a[i].to]=true;
dis[d[t]]=dis[d[h]]+1;
}
memset(bj,false,sizeof(bj));
for (int i=1;i<=n;++i)
if (!bj[i]&&!b[i])
{
int x=dfs(i,0);
if (x==-1) return false;
sum+=x/(2*deep+1);
if (x%(2*deep+1)) ++sum;
}
return sum<k;
}
int main()
{
freopen("rabbit.in","r",stdin);
freopen("rabbit.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for (int i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
ans=2147483647;
for (int i=1;i<=n;++i)
{
l=0;r=m;
while (l<=r)
{
mid=(l+r+1)>>1;
if (judge(i,mid)) ans=min(ans,mid),r=mid-1;
else l=mid+1;
}
}
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
JZOJ 【NOIP2016提高A组集训第16场11.15】兔子的更多相关文章
- JZOJ 【NOIP2016提高A组集训第16场11.15】SJR的直线
JZOJ [NOIP2016提高A组集训第16场11.15]SJR的直线 题目 Description Input Output Sample Input 6 0 1 0 -5 3 0 -5 -2 2 ...
- 【JZOJ4895】【NOIP2016提高A组集训第16场11.15】三部曲
=v= 因为外来的入侵,国王决定在某些城市加派士兵.所有城市初始士兵数量为0.当城市 被加派了k名士兵时.城市i的所有子城市需要被加派k+1名士兵.这些子城市的所有子城市需要被加派k+2名士兵.以此类 ...
- 【JZOJ4894】【NOIP2016提高A组集训第16场11.15】SJR的直线
题目描述 数据范围 解法 考虑逐次加入每一条直线. 对于当前已加入的直线集合L,现在要新加入一条直线l. 那么它产生的贡献,与平行线有关. 对于任意三条直线,如果其中任意两条平行,那么将不做贡献. 所 ...
- 【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子
题目描述 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子窝之 ...
- 【JZOJ4898】【NOIP2016提高A组集训第17场11.16】人生的价值
题目描述 NiroBC终于找到了人生的意义,可是她已经老了,在新世界,没有人认识她,她孤独地在病榻上回顾着自己平凡的一生,老泪纵横.NiroBC多么渴望再多活一会儿啊! 突然一个戴着黑色方框眼镜,方脸 ...
- 【JZOJ4899】【NOIP2016提高A组集训第17场11.16】雪之国度
题目描述 雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路.雪之女王赋予了每一座城市不同的能量,其中第i座城 ...
- 【JZOJ4841】【NOIP2016提高A组集训第4场11.1】平衡的子集
题目描述 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 数据范围 40%的数据满足: ...
- 【NOIP2016提高A组集训第4场11.1】平衡的子集
题目 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 分析 如果暴力枚举每个人被分到哪 ...
- 【NOIP2016提高A组集训第14场11.12】随机游走——期望+树形DP
好久没有写过题解了--现在感觉以前的题解弱爆了,还有这么多访问量-- 没有考虑别人的感受,没有放描述.代码,题解也写得歪歪扭扭. 并且我要强烈谴责某些写题解的代码不打注释的人,像天书那样,不是写给普通 ...
随机推荐
- Java基础知识(三)
一.hashCode 与 equals (重要) 面试官可能会问你:"你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?" 1 ...
- Mybatis执行SQL的完整过程及四大组件介绍
一切的执行从MapperProxy开始,MapperProxy是MapperProxyFactory使用SqlSession创建出来的.所以MapperProxy中包含SqlSession. 可以看到 ...
- Liquibase+SpringBoot的简单使用笔记!update+rollback
该笔记记录了springboot整合liquibase之后,如何根据liquibase ChangeLogFile对数据库进行修改以及回滚操作 参考: baeldung.com JHipster 1. ...
- 836. Rectangle Overlap ——weekly contest 85
Rectangle Overlap A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coor ...
- Java_静态代理与Lambda
静态代理 要点: 公共接口 真实角色 代理角色 public class StaticProxy { public static void main(String[] args) { You you ...
- NS-3环境布置及安装
MMP的,入坑NS3了,LTE是什么鬼!!! ubantu安装NS3解决依赖环境 一堆安装包需要安装,试了N多次(CentOS没安装明白,转而ubantu).利用脚本进行按装. 貌似得先对本机软件进行 ...
- Kubernetes-17:Kubernets包管理工具—>Helm介绍与使用
Kubernets包管理工具->Helm 什么是Helm? 我们都知道,Linux系统各发行版都有自己的包管理工具,比如Centos的YUM,再如Ubuntu的APT. Kubernetes也有 ...
- 释放至强平台 AI 加速潜能 汇医慧影打造全周期 AI 医学影像解决方案
基于英特尔架构实现软硬协同加速,显著提升新冠肺炎.乳腺癌等疾病的检测和筛查效率,并帮助医疗科研平台预防"维度灾难"问题 <PAGE 1 LEFT COLUMN: CUSTOM ...
- Linux Capabilities 入门教程:进阶实战篇
原文链接:https://fuckcloudnative.io/posts/linux-capabilities-in-practice-2/ 该系列文章总共分为三篇: Linux Capabilit ...
- itextpdf freemarker渲染
现有需求涉及到打印pdf操作,简单找了俩种方式 在现有的模板上进行编辑,操作难度比较大 通过freemarker生成静态页面,在进行转换html,完美. 关于动态生成pdf,网上参考的挺多的,看来看去 ...