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 ...
随机推荐
- MFC的消息机制
MFC的消息循环(::GetMessage,::PeekMessage)消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情 分两个步骤完成: 1 “ ...
- eclipse如何查看类之间的引用关系
今天遇到这个问题:mark一点点: 在类名上单击右键.选择Reference->Workingspace快捷克债券Ctrl+Shift+G 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- Delphi透明组件开发(去掉自己的csOpaque,去掉父控件的WS_CLIPCHILDREN,增加WS_EX_TRANSPARENT,截获WM_ERASEBKGND,然后在WM_DRAWITEM里画) good
透明的控件, 一般继承自TGraphicControl的(就是那些没有handle属性, 不能有focus的控件, 如image)都有Transparent属性. 对TWinControl类的控件, ...
- ThinkPhp学习11
原文:ThinkPhp学习11 一.模板的使用 (重点) a.规则 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[i ...
- 利用WinDbg找出程序崩溃的代码行号
之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个内存地址,估计你会疯掉~~ 所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0, 下面是自 ...
- Successful Lisp - Cover
Successful Lisp - Cover Successful Lisp: How to Understand and Use Common Lisp
- UVA 10313(完全背包变形)
Problem B Pay the Price Input: standard input Output: standard output Time Limit: 2 seconds Memory L ...
- oracle查询语句中case when的使用
case when语句语法如下: case when 表达式 then valueA else valueB end; 具体使用如下: select (case when a.colum ...
- ImportError: No module named _sqlite3 - 代码分享
ImportError: No module named _sqlite3 - 代码分享 ImportError: No module named _sqlite3 作者:86市场网 点击 ...
- CC ANUMLA(STL的运用)
题目连接:http://www.codechef.com/problems/ANUMLA 题意:给一个序列所有子集和(2^n个子集),复原这个序列... 如:0 1 1 2 2 3 3 4 原序列为1 ...