2012天津E题
给我们n个坐标点和一个距离d,表示车开m米就没油了。
然后要选几个点建立油站,使得能够从1出发遍历所有的点,然后回到1。 并且规定1这个点必须有油站,在第i个点建立油站的费用是 2^(i-1)
因为费用的特殊性质,如果最大的点能够不建立,那么肯定是不建的。 所以首先在所有的点建立油站,看是否可以遍历所有的点,然后依次从大到小枚举点,看是否可以不建立油站。
但是卡在如何判断是否能够遍历所有的点上。
首先判断,所有的油站距离最近的油站的距离不能超过d, 如果超过就不能到达,而且也不能通过没有油站的点中转
然后,不是油站的点距离最近的油站的距离不能超过d/2 ,这个很显然,如果超过d/2,那么从油站到达这个点,就没办法回去了。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <math.h>
using namespace std;
/*
花费是2^(i-1) 这个很特殊
如何高效得判断是否能经过所有的点然后回家?
*/
const int INF = <<;
const int N = + ;
struct Point
{
int x,y;
double dist(const Point &rhs)
{
return sqrt( (x-rhs.x)*(x-rhs.x)+(y-rhs.y)*(y-rhs.y) );
}
}a[N];
int n,d;
int dist[N][N];
int sta[N];
bool vis[N];
int cnt1,cnt2;
bool bfs()
{
memset(vis,,sizeof(vis));
int tmp = ;
for(int i=;i<=n;++i)
tmp += sta[i];
cnt1 = ;
cnt2 = ;
vis[] = true;
queue<int> q;
q.push();
while(!q.empty())
{
int u = q.front();q.pop();
for(int i=;i<=n;++i)
{
if(!sta[i]) continue;
if(!vis[i] && dist[u][i]<=d)
{
q.push(i);
cnt1++;
vis[i] = true;
}
}
}
for(int i=;i<=n;++i)
if(sta[i]) q.push(i);
while(!q.empty())
{
int u = q.front(); q.pop();
for(int i=;i<=n;++i)
{
if(sta[i]) continue;
if(!vis[i] && dist[u][i]*<=d)
{
vis[i] = true;
cnt2++;
}
}
}
if(cnt1==tmp && cnt2==n-tmp) return true; return false;
}
int main()
{
//freopen("d:/in.txt","r",stdin);
while(scanf("%d%d",&n,&d)!=EOF)
{
for(int i=;i<=n;++i)
{
scanf("%d%d",&a[i].x,&a[i].y);
sta[i] = true;
}
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)
dist[i][j] = dist[j][i] = (int)ceil(a[i].dist(a[j]));
}
if(bfs())
{ for(int i=n;i>=;--i)
{
sta[i] = false;
if(!bfs())
sta[i] = true;
}
while(sta[n]==) n--;
for(int i=n;i>=;--i)
printf("%d",sta[i]);
puts("");
}
else
puts("-1");
}
return ;
}
2012天津E题的更多相关文章
- 2012天津C题
行李箱上的密码锁大家都知道, 现在给我们长度为n(n<=1000)的两个密码串,每次可以转动连续的1->3个字符1格,问最少多少次可以使得第一个串变成第二个串 经历了搜索,贪心,的思路后, ...
- MT【259】2016天津压轴题之最佳逼近
(2016天津压轴题)设函数$f(x)=(x-1)^3-ax-b,x\in R$, 其中$a,b\in R$(1)求$f(x)$的单调区间.(2)若$f(x)$存在极值点$x_0$,且$f(x_1)= ...
- HDU 4279 Number(2012天津网络游戏---数论分析题)
转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:pid=4279">http://acm.hdu.edu ...
- USACO翻译:USACO 2012 JAN三题(2)
USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...
- USACO翻译:USACO 2012 JAN三题(1)
USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...
- 【2012天津区域赛】部分题解 hdu4431—4441
1001: 题意:给你13张麻将牌,问可以胡哪些张 思路: 枚举可能接到的牌,然后dfs判断能否胡 1002: 题意: 已知n,m 求 n的所有约数在m进制下的平方和 做法:队长用java高精度写的 ...
- HDU 4423 Simple Function(数学题,2012长春D题)
Simple Function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- USACO翻译:USACO 2012 JAN三题(3)
USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup ...
- hdu 4278 2012天津赛区网络赛 数学 *
8进制转为10进制 #include<cstdio> #include<iostream> #include<algorithm> #include<cstr ...
随机推荐
- POJ 2186 Popular Cows (强联通)
id=2186">http://poj.org/problem? id=2186 Popular Cows Time Limit: 2000MS Memory Limit: 655 ...
- form表单提交不成功提示
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- C++著名类库和C++标准库介绍
C++著名类库 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介绍——准标准库Boost 3.C++各大有名库的介绍——GUI 4.C++各大有名库的介绍——网络通信 5.C++各 ...
- 定位vc运行时库问题 依赖问题,屡试不爽的一招
用vc 菜单 文件| 打开|指定EXE或DLL,如有指定运行时库,则PE文件的资源中可以看到manifest 配置节 然后据此判断EXE依赖的运行时库, 再根据编译选项调整 运行时库设置
- HTML5文件上传还有进度条
以下是自学it网--中级班上课笔记 网址:www.zixue.it 需要在chrome,ff,IE10下运行 html页面 <!DOCTYPE html> <html lang=&q ...
- TWinControl的消息覆盖函数大全(41个WM_函数和31个CM_函数,它的WndProc就处理鼠标(转发)、键盘(取消拖动)、焦点、和WM_NCHITTEST一共4类消息)
注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中): 其中TWinControl对TControl有10个消息进行了覆盖(红色标记),其中有2个是WM_消息,8个是CM_消 ...
- [Cocos2d-x]解决Android平台ndk-build时不自动删除外部库
参考链接: http://blog.chinaunix.net/uid-26009923-id-3430612.html http://hi.baidu.com/hpyfei/item/52a2b21 ...
- [C++]函数参数浅析
Date:2014-1-9 Summary: 函数参数相关记录 Contents:1.形参实参 形参:用于接收值的变量被称为形参 实参:传递给函数的值被称为实参 2.函数的参数传递之后2种 a).值传 ...
- uva-211-The Domino Effect
http://uva.onlinejudge.org/external/2/211.html http://uva.onlinejudge.org/external/2/211.pdf 题意:每一种骨 ...
- 查看mysql数据库表大小和最后修改时间
查看mysql数据库表相关信息如表大小.修改更新等信息,可以通过以下方式: 一 show table status like ’table_name‘ ; 二 在infortmation_sche ...