hdu 4435 charge-station
// 题意 从1出发逛完N个点回到出发点 要在这N个点选择性建设加油站 车每次加满油最多可以行使D米
// 然后最少要花多少钱才能达到上述要求
// 注意到 第i个城市的花费是 2^(i-1) 所以 我就从N枚举到2
// 尽量让 i大的不建加油站 应为前i-1个加油站总费用都没有第i个加油站一个的费用多
// 难点是怎么判断一组方案的可行性
// 注意到 若i 不建加油站 那么必须存在某个加油站和他距离等于小于 (D+1)/2
// 这样对于每组方案进行搜索,看下是否每个点都是可以达到并可以回到起点的
//
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
using namespace std;
#define INF 100000000
bool mark[];
int dis[][];
int N,D;
double sq(double x1,double y1,double x2,double y2){
return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
bool visit[];
int ct;
void dfs(int u){// 判断有无解
visit[u]=true;
ct++;
for(int i=;i<=N;i++)
if(!visit[i]&&dis[u][i]<=D){
dfs(i);
}
}
void OK(int u,int lt){// 判断方案的可行性
if(mark[u]){
lt=D,visit[u]=true;
ct++;
}
else{
if(lt>=(D+)/) visit[u]=true,ct++;
else return;
}
for(int i=;i<=N;i++)
if(u!=i&&!visit[i]&&dis[u][i]<=lt)
OK(i,lt-dis[u][i]);
} int main(){ int rc[][];
int i,j;
while(scanf("%d %d",&N,&D)!=EOF){
for(i=;i<=N;i++) mark[i]=true;
for(i=;i<=N;i++)
scanf("%d %d",&rc[i][],&rc[i][]);
if(N==){printf("0\n");continue;}
for(i=;i<N;i++)
for(j=i+;j<=N;j++){
double t=sq(rc[i][],rc[i][],rc[j][],rc[j][]);
int ti=ceil(sqrt(t));
dis[i][j]=dis[j][i]=ti;
}
memset(visit,,sizeof(visit));
ct=;
dfs();
if(ct<N) {printf("-1\n");continue;}
for(i=N;i>;i--){ // 枚举方案
mark[i]=false;
ct=;
memset(visit,,sizeof(visit));
OK(,);
if(ct<N)
mark[i]=true;
}
for(i=N;i>;i--)if(mark[i]) break;
for(;i>;i--) if(mark[i])printf("");else printf("");
printf("\n");
}
return ;
}
hdu 4435 charge-station的更多相关文章
- HDU 4435 charge-station () bfs图论问题
E - charge-station Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- HDU 4435 charge-station bfs图论问题
E - charge-station Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- hdu 3879 Base Station 最大权闭合图
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3879 A famous mobile communication company is plannin ...
- HDU 3879 Base Station
Base Station Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original I ...
- 【转载】【最短路Floyd+KM 最佳匹配】hdu 2448 Mining Station on the Sea
Mining Station on the Sea Problem Description The ocean is a treasure house of resources and the dev ...
- HDU 3879 Base Station(最大权闭合子图)
经典例题,好像说可以转化成maxflow(n,n+m),暂时只可以勉强理解maxflow(n+m,n+m)的做法. 题意:输入n个点,m条边的无向图.点权为负,边权为正,点权为代价,边权为获益,输出最 ...
- hdu 4435
一道枚举+搜索题: 很容易看出这道题目要求尽量不在大的城市里面建加油站: 所以从最大的城市开始枚举! 代码: #include<cstdio> #include<cmath> ...
- HDU 4435 charge-station (并查集)
先说下题目的意思: 在一个二维坐标系中有N个点,某人要来个走遍所有点的旅行,但是他的车每次加油后只能走M个单位距离:所以要在这个N点中选一些建立加油站:问题来了:i^th 点 建加油站的花费是 2 ...
- [DLX反复覆盖] hdu 3656 Fire station
题意: N个点.再点上建M个消防站. 问消防站到每一个点的最大距离的最小是多少. 思路: DLX直接二分推断TLE了. 这时候一个非常巧妙的思路 我们求的距离一定是两个点之间的距离 因此我们把距离都求 ...
随机推荐
- oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...
- crawler
# !/usr/bin/env python# encoding:UTF-8from util import request_urlimport reimport osimport sys#from ...
- 【面试题030】最小的k个数
[面试题030]最小的k个数 题目: 输入n个整数,找出其中最小的k个数. 例如输入4.5.1.6.2.7.3.8这8个字,则其中最小的4个数字是1.2.3.4. 思路一: ...
- 6.5 THUSC 考试题解
QAQ 由于并没有数据,而且没有A掉的是提交答案题目,所以并没有修改 QAQ 只能放题解了,代码还没有拿到,不过在清华听了一波习题讲评的安利 第一题 成绩单 先说暴力分 对于单调序列来说最优决策一定是 ...
- *[hackerrank]Volleyball Match
https://www.hackerrank.com/contests/w1/challenges/volleyball-match 此题不错,首先可以看出是DP,S(x, y)= S(x - 1, ...
- 腾讯QQ的开发分客户端软件和服务器端软件
Windows客户端主要是C++ COM/ATL Q+Web 后端C++ CGI ,前端javascript和flash 望采纳 腾讯QQ使用何种开发平台? 腾讯QQ的开发分客户端软件和服务器端软件两 ...
- Java学习笔记之:Java 接口
一.引言 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类 ...
- 关于delphi Assigned
1. 根据 Delphi 指令参考手册中 说明: Assigned 函式在参数不为 nil 时传回 True, 表示指针已经指到某个内存地址,这个内存地址可能是一个对象地首地址,也可能在函数或过程中, ...
- RMI
Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力.Java作为一种风靡一时的网络开发语言 ...
- Servlet的应用
1.重定向 HttpServletRequest接口提供的sendRedirect()方法用于生产302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的U ...