Description

在一个大小为1000*1000的区域中,有n个固定点,m棵tree 。 现在你要建一个围栏来保护tree,建它的费用为你选用的固定点的个数 *20和 你没有圈进围栏的tree*111. 现在希望这个值越小越好. 3<=N<=100. 1<=M<=100

Input

第一行给出n,m 下面开始n行,给出固定的坐标 下面开始m行,给出tree的坐标

Output

输出最小费用

根据题目设定的参数,凡是可以围住的点都要围住,同bzoj1027可以转为最小环

#include<bits/stdc++.h>
struct pos{
int x,y;
void read(){
scanf("%d%d",&x,&y);
}
}ns[],ms[],cs[];
pos operator-(pos a,pos b){return (pos){a.x-b.x,a.y-b.y};}
int operator*(pos a,pos b){return a.x*b.y-a.y*b.x;}
bool operator<(pos a,pos b){return a*b<;}
int ans=,n,m,cp=;
bool in(pos w){
for(int i=;i<cp;++i)if(cs[i-]<w&&w<cs[i]){
return cs[i-]-w<cs[i]-w;
}
return ;
}
void mins(int&a,int b){if(a>b)a=b;}
int l[][];
char s[][];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<n;++i)ns[i].read();
for(int i=;i<m;++i)ms[i].read();
for(int i=;i<n;++i)if(ns[i].x<ns[].x)std::swap(ns[i],ns[]);
pos p0=ns[];
for(int i=;i<n;++i)ns[i]=ns[i]-p0;
for(int i=;i<m;++i)ms[i]=ms[i]-p0;
std::sort(ns+,ns+n);
for(int i=;i<n;++i){
while(cp>=&&ns[i]-cs[cp-]<cs[cp-]-cs[cp-])--cp;
cs[cp++]=ns[i];
}
int p=;
for(int i=;i<m;++i){
if(!in(ms[i]))ans+=;
else ms[p++]=ms[i];
}
m=p;
if(p){
for(int i=;i<n;++i){
for(int j=;j<n;++j){
l[i][j]=0x3f3f3f3f;
if(i!=j){
bool is=;
pos d=ns[i]-ns[j];
for(int k=;k<m;++k)if(d<ms[k]-ns[j]){
is=;
break;
}
if(is)l[i][j]=;
}
}
}
for(int k=;k<n;++k)
for(int i=;i<n;++i)
for(int j=;j<n;++j)mins(l[i][j],l[i][k]+l[k][j]);
for(int i=;i<n;++i)mins(l[][],l[i][i]);
ans+=l[][]*;
}
printf("%d\n",ans);
return ;
}

bzoj 1390: [Ceoi2008]Fence的更多相关文章

  1. BZOJ 1391 [Ceoi2008]order

    1391: [Ceoi2008]order Description 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完 ...

  2. BZOJ 1391: [Ceoi2008]order [最小割]

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1509  Solved: 460[Submit][Statu ...

  3. Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1105  Solved: 331[Submit][Statu ...

  4. bzoj1390 [CEOI2008] Fence

    题意 给出n个白点和m个黑点.现在你需要选择一些白点把黑点圈起来.每有一个黑点不能被选出的白点组成的凸包包含就需要付出111的代价,每选出一个白点就需要付出20的代价.要求最小化代价之和 n,m< ...

  5. bzoj 1391 [Ceoi2008]order(最小割)

    [题意] 有n个有偿工作选做,m个机器,完成一个工作需要若干个工序,完成每个工序需要一个机器,对于一个机器,在不同的工序有不同的租费,但买下来的费用只有一个.问最大获益. [思路] 对于工作和机器建点 ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. 【BZOJ】【1391】【CEOI2008】order

    网络流/最小割 暴力建图就好了……S->i 容量为收益,i->j+n 容量为租金,j+n->T容量为购买所花的钱. 如果亏钱的话那么割掉的就是收益,表示不赚钱. 如果租金大于购买所花 ...

  8. BZOJ 1724: [Usaco2006 Nov]Fence Repair 切割木板

    题目 1724: [Usaco2006 Nov]Fence Repair 切割木板 Time Limit: 5 Sec  Memory Limit: 64 MB Description Farmer ...

  9. [BZOJ 1724] Fence Repair

    这大概是BZOJ里除了A+B Problem最水的一道题了吧 题面:http://www.lydsy.com/JudgeOnline/problem.php?id=1724 这道题其实有一些思路还是可 ...

随机推荐

  1. jquery中使用jsonp

    1 .关于jsonp的原理等,请看下面的文章,说的很明白. http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery. ...

  2. array_merge、array_merge_recursive

    原文:http://www.111cn.net/phper/php/61889.htm    我在php学习在使用到最多的数据合并方法就是array_merge.array_merge_recursi ...

  3. 《头文字D》热门同人插画欣赏

    <头文字D>(INITIAL D)是一部以山道飙车为题材的日本青年漫画,以及以漫画改编的动画系列(包含电视版.OVA.与电影版).漫画作者为重野秀一(しげの秀一),自1995 年起开始在讲 ...

  4. QModelIndex 与 QStandardItem互转

    1. QModelIndex 转换成QStandardItem QStandardItem * item=QStandardItemModel::​itemFromIndex(const QModel ...

  5. Objective-C和Swift混合编程开发

    创建混编的Framework工程 第一步:创建target为Framework的工程 打开Xcode6-Beta,菜单栏File—>New—>Project; 创建一个新的工程,工程模板选 ...

  6. 好玩的Python库tqdm (转载)

    原文地址: https://blog.csdn.net/zejianli/article/details/77915751 可以显示循环的进度条的库,再也不用担心不知道程序跑到哪里还要跑多久了 tqd ...

  7. MQTT连接服务器返回2

    /********************************************************************************* * MQTT连接服务器返回2 * ...

  8. QT-This application failed to start because it could not find or load the Qt platform plugin "windows"

    前言 将qt的vs工程生成Release版本,不过出现错误,现将可以解决该问题的方法记录下来. 项目环境 系统:win7_64 软件:VS2013.QT5.6.2.qt-vs-addin-1.2.5 ...

  9. UnicodeDammit

    UnicodeDammit 是BS内置库, 主要用来猜测文档编码. 编码自动检测 功能可以在Beautiful Soup以外使用,检测某段未知编码时,可以使用这个方法: from bs4 import ...

  10. 辞树的QAQ水题(字符串统计,思维)

    思路:统计一串字符有多少个'A',并分别统计出每个'A'前后有多少'Q'.然后让每个'A'前后的'Q'相乘并相加就能得出结果了. 注意:数据的类型,卡了int,要用long long. 还有就是在pc ...