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 ...
随机推荐
- SAP自带的创建报表工具
SAP自带的工具有quickview和query两个主要的工具,当然还有其他的 quickview和query的区别主要是query支持系统之间的传输,quickview只能是用户的客户端创建使用,不 ...
- javacsript (十一) 对象
他的对象的概念和python的字典的格式一样, JavaScript 对象 对象由花括号分隔.在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义.属性由逗号分隔: var ...
- form表单提交不成功提示
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- 9月mob(ShareSDK)活动预告,这个秋天非常热
9月秋天来临,广州的天气依旧非常热,广州的活动氛围更热~ 先有GMGC B2B对接会在广州创新谷,再有上方网TFC全球移动游戏开发人员大会来袭,游戏圈的火越烧越旺,成都GMGDC全球移动游戏开发人员大 ...
- NoSql 数据库
几款主流 NoSql 数据库的对比 posted @ 2016-05-11 21:36 vajoy 阅读(915) 评论(3) 编辑 收藏 最近小组准备启动一个 node 开源项目,从前端亲和力. ...
- [Android学习笔记]EditText的使用
EditText就是我们最常用的文本输入框 常用属性见官方文档 主要是以下几个问题: 1.取消默认获取焦点 Activity启动时候会把焦点默认停留在第一个EditText控件上 一般的解决方法是在此 ...
- 3.1.2 MVC模式和URL访问
本节课大纲: 一.什么是MVC //了解 M -Model 编写model类 对数据进行操作 使用Model类 来操作数据 V -View 编写html文件,页面呈现 C -Controller 编写 ...
- Java+7入门经典 - 6 扩展类与继承 Part 2/2
6.12 设计类 1) 通过已定义的基类派生子类, 并且添加方法和数据成员来自定义子类, 创建出类的层次结构; Dog 'IS-A' Animal 2) 定义一系列没有层次结构, 由类对象作为数据成员 ...
- 关于NSArray的几种排序:
#利用数组的sortedArrayUsingComparator调用 NSComparator 当中NSComparator事实上就是一个返回NSComparisonResult的block. ty ...
- 以JTextPanel为例Swing的鼠标事件详解
如下界面可以通过该界面研究一下Swing的鼠标事件: 图中用红粗线圈起来的为JtextPanel,该Panel添加了鼠标事件监听器,鼠标事件监听器有三种,分别为MouseWheelListener,M ...