bzoj1239
题解:
首先计算出两两之间的距离
然后二分答案
然后贪心判断是否可以放置少于等于k个
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,m,k,x,i,j,l,L,R,mid,r[N],d[N],h[N],dt[N][N];
int judge(int x)
{
int temp=k,tot=m,t,u,v,c[N],p[N];
for (int i=;i<n;i++)c[i]=h[i];
for (int i=;i<n;i++)
if (!c[i])
{
t=1e9;
for (int j=;j<n;j++)
if (c[j]==)t=min(t,dt[i][j]);
if (t<=x)c[i]=,tot++;
}
if (tot==n)return ;
while (temp--)
{
memset(p,,sizeof(p));
for (int i=;i<n;i++)
if (!c[i])
for (int j=;j<n;j++)
if (c[j]!=&&dt[i][j]<=x)p[j]++;
u=;
for (int i=;i<n;i++)
if (c[i]!=&&p[i]>=u)u=p[i],v=i;
if (!c[v])tot++;c[v]=;
for (int i=;i<n;i++)
if (!c[i])
{
t=1e9;
for (int j=;j<n;j++)
if (c[j]==)t=min(t,dt[i][j]);
if (t<=x)c[i]=,tot++;
}
if (tot==n)return ;
}
return ;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for (int i=;i<n;i++)
for (int j=;j<n;j++)dt[i][j]=(i==j)?:1e9;
for (int i=;i<n;i++)scanf("%d",&r[i]);
for (int i=;i<n;i++)
{
scanf("%d",&d[i]);
R+=d[i];
dt[i][r[i]]=dt[r[i]][i]=min(dt[i][r[i]],d[i]);
}
for (int i=;i<=m;i++)
{
scanf("%d",&x);
h[x]=;
}
for (int l=;l<n;l++)
for (int i=;i<n;i++)
for (int j=;j<n;j++)
if (i!=j&&i!=l&&j!=l)
if (dt[i][l]+dt[l][j]<dt[i][j])dt[i][j]=dt[i][l]+dt[l][j];
while (L<=R)
{
mid=(L+R)>>;
if (judge(mid))R=mid-;
else L=mid+;
}
printf("%d\n",L);
}
bzoj1239的更多相关文章
随机推荐
- this 指向 及 调用方式
1. this 指向 函数执行方式 this指向1.直接圆括号 window2.对象调用 对象3.事件触发 触发对象4.定时器运行 window (常常定义变量存储this以达到this指向特定对象) ...
- 获取 ip ( 第三方接口 )
搜狐IP地址查询接口(默认GBK):http://pv.sohu.com/cityjson 搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/cityjson?ie=utf-8 ...
- C# 视频多人脸识别的实现
上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo基本思路如下:一.识别线程1.获取当前图片2.识别当前图片的人脸位置,并将结果存入 ...
- sort-选择排序
void sort_select(vector<int> &v) { for(int i=0;i<v.size()-1;i++) { int min=v[i]; int in ...
- 响应式图片 (responsive image)
更新 : 2019-02-21 除了写 srcset sizes 还有一种 x1, x2, x3, x4 的写法. 我们对比一下 假设 pc 希望是 1000w mobile 希望是 300w siz ...
- Appium的工作原理
把我们写的python语言代码,看做客户端 通过客户端向appium服务器发送请求 appium服务器把我们的代码转换成手机可以识别的指令 然后把指令发给手机,手机根据指令做出相应的操作 最后手机把操 ...
- jquey 小记
1. $.each(array, [callback]) 遍历[常用] 解释: 不同于例遍jQuery对象的$().each()方法,此方法可用于例遍任何对象. 回调函数拥有两个参数: 第一个为对象的 ...
- 2017-2018-2 20165327 实验二 《Java面向对象程序设计》实验报告
20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...
- p1472 Cow Pedigrees
用dp[i][j]记录i个点,组成深度恰好为j的方案数.arr[i][j]记录i个点,深度<=j的方案数.那么dp[i][j]只有i为奇数时不为0.而arr[i][j]等于dp[i][j]的前缀 ...
- 5 项目---自定义用户模型以及轮播图图片url返回格式
创建自定义的用户模型类 1. 用命令创建users 应用 2. 将users 注册到settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'd ...