给我们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题的更多相关文章

  1. 2012天津C题

    行李箱上的密码锁大家都知道, 现在给我们长度为n(n<=1000)的两个密码串,每次可以转动连续的1->3个字符1格,问最少多少次可以使得第一个串变成第二个串 经历了搜索,贪心,的思路后, ...

  2. 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)= ...

  3. HDU 4279 Number(2012天津网络游戏---数论分析题)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:pid=4279">http://acm.hdu.edu ...

  4. USACO翻译:USACO 2012 JAN三题(2)

    USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...

  5. USACO翻译:USACO 2012 JAN三题(1)

    USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...

  6. 【2012天津区域赛】部分题解 hdu4431—4441

    1001: 题意:给你13张麻将牌,问可以胡哪些张 思路: 枚举可能接到的牌,然后dfs判断能否胡 1002: 题意: 已知n,m 求 n的所有约数在m进制下的平方和 做法:队长用java高精度写的 ...

  7. HDU 4423 Simple Function(数学题,2012长春D题)

    Simple Function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  8. USACO翻译:USACO 2012 JAN三题(3)

    USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup ...

  9. hdu 4278 2012天津赛区网络赛 数学 *

    8进制转为10进制 #include<cstdio> #include<iostream> #include<algorithm> #include<cstr ...

随机推荐

  1. Swift - 图像控件(UIImageView)的用法

    1,使用图像控件显示图片 1 2 3 var imageView=UIImageView(image:UIImage(named:"icon")) imageView.frame= ...

  2. 300M无线路由器 TL-WR842N - TP-LINK官方网站

    300M无线路由器 TL-WR842N - TP-LINK官方网站 300M无线路由器TL-WR842N 11N无线技术.300Mbps无线速率 2x2MIMO架构.CCA技术,提升无线稳定性.扩大无 ...

  3. Oracle百问百答(一)

    Oracle百问百答(一) 01.如何查看oracle的版本信息? 02.如何查看系统被锁的事务信息? 03.怎么获取有哪些用户在使用数据库? 04. 数据表中的字段最大数是多少? 表或视图中的最大列 ...

  4. TCP连接的建立(二)

    被动打开 SYN cookies TCP协议开辟了一个比較大的内存空间请求连接队列来存储连接请求块,当SYN请求不断添加,请求连接数目到达上限时,会致使系统丢弃SYN连接请求.SYN cookies技 ...

  5. MingW环境下的windows编程

    一般在进行windows编程时都使用vc++精简版,其插入菜单,图片等资源等更简单,且vc中对中文有更好的支持,win7下安装的Mingw中文并不能很好地显示,有光标显示的位置和光标实际位置不符的问题 ...

  6. linux 软连接 硬连接

    1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引 ...

  7. TControl的消息覆盖函数大全(15个WM_函数和17个CM_函数,它的WndProc就处理鼠标与键盘消息)

    注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中)(特别注意,这里居然没有WM_PAINT函数): TControl = class(TComponent) private ...

  8. RGB空间与HSV空间的相互转换(C++实现,修正网上大多数的代码错误)

    void Rgb2Hsv(float R, float G, float B, float& H, float& S, float&V) { // r,g,b values a ...

  9. nodejs启动守护程序pm2

    nodejs启动守护程序pm2 by 伍雪颖 做了个应用,server放阿里云,只是server总会自己断,后来写了个心跳程序,就是检測应用线程是否还在,不在就再启动, 这种方法好笨重啊,后来发现no ...

  10. [置顶] 如何在Python IDLE中调试Python代码?

    好久没有用Python了,居然忘记了怎么在Python IDLE中调试Python代码.百度了一下,然后还是写下来吧,以免以后又忘记了. 1. Set break point in the sourc ...