【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子
题目描述
在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝。更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连。换句话讲,这些兔子窝之前的路径构成一张N个点、M条边的无向连通图,而度数大于2的点至多有1个。
兔子们决定把其中K个兔子窝扩建成临时避难所。当危险来临时,每只兔子均会同时前往距离它最近的避难所躲避,路程中花费的时间在数值上等于经过的路径条数。为了在最短的时间内让所有兔子脱离危险,请你安排一种建造避难所的方式,使最后一只到达避难所的兔子所花费的时间尽量少。
数据范围
对于30%的数据,N≤15,K≤4;
对于60%的数据,N≤100;
对于100%的数据,1≤K≤N≤1,000,1≤M≤1,500
=w=
SB贪心。
花O(n)的时间枚举一个一定放的点,
然后感性思考,这个点显然放在接近度大于3的那个点的附近,这样可以尽量覆盖更多的窝。
这时,所有环都将切割为一条链,所以现在的所有连通块都是链。
考虑二分答案,那么每条链的贡献都是确定的,为链长除以(2*mid+1)向上取整。
然后答案就易求。
代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
const char* fin="rabbit.in";
const char* fout="rabbit.out";
const int inf=0x7fffffff;
const int maxn=1007,maxm=1507*2;
int n,m,n1,i,j,k,ans,tmp,tmd;
int f[maxn][maxn];
int fi[maxn],la[maxm],ne[maxm],tot;
int l,r,mid,head,tail,b[maxn];
int dis[maxn];
bool bz[maxn],az[maxn];
void add_line(int a,int b){
tot++;
ne[tot]=fi[a];
la[tot]=b;
fi[a]=tot;
}
void add(int v,int v1,int limit){
if (!bz[v] && v1<=limit){
b[++tail]=v;
dis[v]=v1;
bz[v]=true;
}
}
int dfs(int v,int from){
int i=0,j,k;
if (az[v]) return -1;
if (bz[v]) return 0;
az[v]=true;
for (k=fi[v];k;k=ne[k])
if (la[k]!=from){
j=dfs(la[k],v);
if (j==-1) return -1;
i+=j+1;
}
return i;
}
bool judge(int st,int v){
int i,j,k,sum=0;
head=tail=0;
memset(bz,0,sizeof(bz));
add(st,0,v);
while (head++<tail) {
for (k=fi[b[head]];k;k=ne[k]) add(la[k],dis[b[head]]+1,v);
}
memset(az,0,sizeof(az));
for (i=1;i<=n;i++)
if (!az[i] && !bz[i]){
j=dfs(i,0);
if (j==-1) return false;
sum+=j/(2*v+1)+(j%(2*v+1)?1:0);
}
return sum+1<=n1;
}
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d%d%d",&n,&m,&n1);
for (i=1;i<=m;i++){
scanf("%d%d",&j,&k);
add_line(j,k);
add_line(k,j);
}
ans=inf;
for (i=1;i<=n;i++){
l=0;
r=m;
while (l<r){
mid=(l+r)/2;
if (judge(i,mid)) r=mid;
else l=mid+1;
}
ans=min(ans,l);
}
cout<<ans<<endl;
return 0;
}
【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子的更多相关文章
- JZOJ 【NOIP2016提高A组集训第16场11.15】兔子
JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3 ...
- 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. 那么它产生的贡献,与平行线有关. 对于任意三条直线,如果其中任意两条平行,那么将不做贡献. 所 ...
- 【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】随机游走
题目 YJC最近在学习图的有关知识.今天,他遇到了这么一个概念:随机游走.随机游走指每次从相邻的点中随机选一个走过去,重复这样的过程若干次.YJC很聪明,他很快就学会了怎么跑随机游走.为了检验自己是不 ...
随机推荐
- CF1148F - Foo Fighters
CF1148F - Foo Fighters 题意:你有n个物品,每个都有val和mask. 你要选择一个数s,如果一个物品的mask & s含有奇数个1,就把val变成-val. 求一个s使 ...
- 深入浅出 Java Concurrency (3): 原子操作 part 2[转]
在这一部分开始讨论数组原子操作和一些其他的原子操作. AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray的API类似,选择有代表性的Atom ...
- jeecms v9导入myeclipse 2015 ehcache.xml报错问题
1.找不到ehcache.xml文件问题 cache-context.xml <property name="configLocation"> <value> ...
- django2.x报错No module named 'django.core.urlresolvers'b
解决方法就是: from django.urls import reverse 最近从django1.9迁移到django2.0中出现一个意外的报错: 这个报错的原因在stack overflow上有 ...
- videojs使用的常见问题
1.报错The play() request was interrupted by a new load request 我在动态更换video的url时会报这个错.修改一下原来的代码如下,就正常了 ...
- 启动easy-mock
1.启动mongodb 启动mongodb服务器: /usr/local/mongodb/bin/mongod -config /usr/local/mongodb/data/mongodb.co ...
- phonegap geolocation android 问题
很纠结的 phonegap 使用定位的时候 android 获取地址异常的慢,为什么呢? 经过分析 如果android 只开启gprs 上网功能 可以立即获取到经纬度 如果只开启wifi 根本就获取不 ...
- [Array]414. Third Maximum Number
Given a non-empty array of integers, return the third maximum number in this array. If it does not e ...
- Python 字符串与二进制串的相互转换
def encode(s): return ' '.join([bin(ord(c)).replace('0b', '') for c in s]) def decode(s): return ''. ...
- php用mysql方式连接数据库出现Deprecated报错
以上是用php5.5 连接mysql数据库时报的错. 于是我用php5.4 连接正常没有报错. 这与mysql版本无关系,php 5.x版本,如5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器 ...