HDU 5934 Bomb(炸弹)
HDU 5934 Bomb(炸弹)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Problem Description - 题目描述
现有N颗炸弹急需引爆。 每颗炸弹有三个属性:爆炸半径ri,炸弹位置(xi, yi),还有起爆费用ci,即你需要花费ci才能引爆这个炸弹。 如果一颗未引爆的炸弹在另一颗炸弹的爆炸半径边缘或者其中,则会被连锁引爆。 此时你已得知所有炸弹的属性,用最小的花费引爆所有炸弹吧。
CN
第一行为一个整数T,表示测试用例的数量。 每个测试用例开头都有一个整数N,表示炸弹的数量。 随后N行,第i行有四个整数xi,yi,ri,与ci,表示第i个炸弹的坐标(xi,yi),爆炸半径ri与起爆费用ci。 数据范围
- ≤T≤
- ≤N≤
- −^≤xi, yi, ri≤^
- ≤ci≤^
CN
Output - 输出
对于每组测试用例,输出"Case #x: y",x表示从1开始的用例编号,y为最小费用。
CN
Sample Input - 输入样例
1
5
0 0 1 5
1 1 1 6
0 1 1 7
3 0 2 10
5 0 1 4
Sample Output - 输出样例
Case #1: 15
题解
Tarjan缩点
先根据每个炸弹的爆炸范围和坐标构造出一个有向图,然后再进行缩点。
入度为0的点则为需要引爆的点,将其费用相加即是结果。
代码 C++
#include <cstdio>
#include <algorithm>
#define ll __int64
#define mx 1005
int n, c[mx]; struct Edge{
int to, nxt;
}edge[mx*mx];
int head[mx], iE;
void addEdge(int u, int v){
edge[iE].to = v; edge[iE].nxt = head[u];
head[u] = iE++;
} struct Point{
ll x, y, r;
}data[mx];
bool cmp(int i, int j){
ll oo, rr;
oo = (data[i].x - data[j].x)*(data[i].x - data[j].x) + (data[i].y - data[j].y)*(data[i].y - data[j].y);
rr = data[i].r*data[i].r;
return oo <= rr;
} int stack[mx], inUS[mx], iS, ID[mx], fID[mx], iF, size[mx];
void Tarjan(int now){
fID[now] = ++iF;
stack[++iS] = now; inUS[now] = ;
int u, v, i = iS, fIDold = fID[now];
for (u = head[now]; ~u; u = edge[u].nxt){
v = edge[u].to;
++size[ID[v]];
if (inUS[v] == ) Tarjan(v);
if (~inUS[v]) fID[now] = std::min(fID[v], fID[now]);
}
if (fID[now] == fIDold){
while (iS >= i){
ID[stack[iS]] = now; inUS[stack[iS]] = -;
c[now] = std::min(c[stack[iS]], c[now]);
--iS;
}
}
} void read(){
scanf("%d", &n);
int i, j;
for (i = ; i < n; ++i){
scanf("%I64d%I64d%I64d%d", &data[i].x, &data[i].y, &data[i].r, &c[i]);
head[i] = -; ID[i] = i; inUS[i] = ;
}
iE = ;
for (i = ; i < n; ++i){
for (j = i + ; j < n; ++j){
if (cmp(i, j)) addEdge(i, j);
if (cmp(j, i)) addEdge(j, i);
}
} iS = iF = ;
for (i = ; i < n; ++i){
if (inUS[i] == ){ Tarjan(i); size[ID[i]] = ; }
}
} int sum(){
int i, opt = ;
for (i = ; i < n; ++i){
if (size[i] == ) opt += c[ID[i]];
}
return opt;
} int main(){
int t, it, i;
for (it = scanf("%d", &t); t; --t, ++it){
read();
printf("Case #%d: %d\n", it, sum());
}
return ;
}
HDU 5934 Bomb(炸弹)的更多相关文章
- HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 5934 Bomb
Bomb Problem Description There are N bombs needing exploding.Each bomb has three attributes: explodi ...
- HDU 5934 Bomb(tarjan/SCC缩点)题解
思路:建一个有向图,指向能引爆对象,把强连通分量缩成一点,只要点燃图中入度为0的点即可.因为入度为0没人能引爆,不为0可以由别人引爆. 思路很简单,但是早上写的一直错,改了半天了,推倒重来才过了... ...
- hdu 3555 Bomb 炸弹(数位DP,入门)
题意: 给一个数字n,求从1~n中有多少个数是含有49的,比如49,149,1490等都是含49的. 思路: 2^64也顶多是十进制的20多位,那么按十进制位来分析更简单.如果能计算k位十进制数中分别 ...
- 【(最小权点基)tarjan强连通分量缩点+tarjan模板】HDU 5934 Bomb
[AC] #include<bits/stdc++.h> using namespace std; typedef long long ll; int n; ; ; const int i ...
- 数位DP入门之hdu 3555 Bomb
hdu 3555 Bomb 题意: 在1~N(1<=N<=2^63-1)范围内找出含有 ‘49’的数的个数: 与hdu 2089 不要62的区别:2089是找不不含 '4'和 '62'的区 ...
- HDU 3622 Bomb Game(2-sat)
HDU 3622 Bomb Game 题目链接 题意:求一个最大半径,使得每一个二元组的点任选一个,能够得到全部圆两两不相交 思路:显然的二分半径,然后2-sat去判定就可以 代码: #include ...
- HDU 5934:Bomb(强连通缩点)
http://acm.hdu.edu.cn/showproblem.php?pid=5934 题意:有N个炸弹,每个炸弹有一个坐标,一个爆炸范围和一个爆炸花费,如果一个炸弹的爆炸范围内有另外的炸弹,那 ...
- 【HDU 5934】Bomb(强连通缩点)
Problem Description There are N bombs needing exploding. Each bomb has three attributes: exploding r ...
随机推荐
- >>> 主页推荐链接
Apple专区 App Store 排行榜 App Store 排行榜 - 中国区 PC6苹果网 威锋网 第三方 环信 - 即时通讯云领导者 腾讯Bugly - Android Crash | iOS ...
- gulp外挂 uglify 的使用
1.js文件压缩 第一步:安装外挂 : 第二步:gulpfile.js 配置 : (首先看你的package.json 中有没有添加依赖,如果有 这一句,代表添加成功啦.) 输入以下代码 : var ...
- Windows Phone 十九、罗盘
磁力计概述 拥有磁力计硬件支持的设备可以根据磁力计来确定相对于北极的角度 磁力计的访问 API 定义在 Compass 类中 调用方式和加速计类似 <Grid Background=" ...
- java实现甘特图的2种方法:SwiftGantt和Jfree (转)
http://blog.sina.com.cn/s/blog_50a7c4a601009817.html 第一种方法使用SwiftGantt实现甘特图(进度图推荐这个) import java.a ...
- 想学习Android开发
最近被别人说知识面窄,心里受伤了.准备学学Android开发,如果能在手机里运行自己写的app,那是多么high ~~~ Android开发需要看什么资料呢? 说明:本人一直从事windows下的C+ ...
- CentOS 6.5下Zabbix的安装配置
1.确保开发环境lamp已经安装 2.下载zabbix 官方下载地址:http://www.zabbix.com/download.php 选择和自己系统对应的版本,这里选择安装与Linux内核为2. ...
- window7下安装第三方包报错及解决
window7 64位下安装第三方包,,比如安装yaml的exe执行文件,会 报错及解决:python version 2.7(3.4) required,which was not found in ...
- MySQL MMM 双主在Failover时挂起
两台MySQL服务器,版本Percona 5.5.35,配置双主,装在Centos 6.4下 Master1 db1,172.21.120.160(真实IP),172.21.120.173(Writ ...
- cocos2d-x quick 学习 一 环境
最近几天都在学习quick 一直也在查找资料. 本来这篇文章在昨晚就能写好的.可是昨晚环境遇到点问题自己没想通. 正题:首先是环境配置: 由于我在mac下 所以在网上找了很多资料提前看了. 我之前也 ...
- C# TimeSpan 计算时间差(时间间隔)
命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 说明: 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点 ...