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 ...
 
随机推荐
- 通过OpenSSL解码X509证书文件
			
在Windows平台下.假设要解析一个X509证书文件,最直接的办法是使用微软的CryptoAPI. 可是在非Windows平台下,就仅仅能使用强大的开源跨平台库OpenSSL了.一个X509证书通过 ...
 - golang做的邮件服务器
			
https://gowalker.org/github.com/gleez/smtpd https://www.v2ex.com/t/133221
 - 外国的Delphi网站
			
www.phidels.com delphifr.com http://www.swissdelphicenter.com/torry/showcode.php?id=787 B4A delphifa ...
 - TComponent,TControl,TWinControl,TGraphic的DefineProperties赏析与说明(不懂)
			
先观赏一下最后的实现效果: object Form1: TForm1 Left = Top = Width = Height = Caption = 'Form1' Color = clBtnFace ...
 - dwz+jquery+fileupload+springmvc实现文件上传 及图片预览
			
1 前台jsp:文件的上传利用了iframe实现局部刷新功能.使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jarD ...
 - C++中的常对象和常对象成员
			
常对象 常对象必须在定义对象时就指定对象为常对象. 常对象中的数据成员为常变量且必须要有初始值,如 Time const t1(12,34,36); //定义t1为常对象 这样的话,在所有的场合中,对 ...
 - linux  df和du统计的空间不一致
			
假设你发现是 /tmp/ 目录不对劲,那么就这样就可以查看: lsof | grep /tmp 输出的结果中,注意某些含有“(deleted)”字样的记录,它们中的一部分就是罪魁祸首,将它们kill ...
 - [Java学习笔记]Java Tips
			
1.Java没有sizeof关键字 , volatile是java关键字.详情见:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166. ...
 - 五、Linux/UNIX操作命令积累【cp、mv、cat、grep、ps】
			
在使用Linux/UNIX下,常常会使用文本界面去设置系统或操作系统,作者本人在工作的过程也在不断接触这方面的命令,所以为此特酝酿.准备.開始了本文的编写.本文主要记录自己平时遇到的一些Linux/U ...
 - JAVA的extends使用方法
			
理解继承是理解面向对象程序设计的关键.在Java中,通过keywordextends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不同意多继承. (1)继承 ...