大意:给定一些灯泡,灯泡的照明范围是R,当两个圆相切或者相交时可以看做一个连通的,问最多可以去掉多少个灯泡使得剩下的3个圆还是连通的。

思路:把圆看做顶点,判断圆是否相交,如果相交,赋边权为1,然后枚举一个定点到三个点的最小值,用总数减去最小值减1即是答案。

View Code

/*最短路;三点连通*/
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#include <map>
using namespace std;const int INF = 0x3f3f3f3f;
const int maxn = 210;
const int maxm = 1000*1000;typedef int LL;struct Edge
{LL v;LL w;LL next;
}edge[maxm];LL cnt;LL n, m;LL first[maxn];
LL d1[maxn], d2[maxn], d3[maxn];void read_graph(LL u, LL v, LL w)
{edge[cnt].v = v, edge[cnt].w = w;edge[cnt].next = first[u], first[u] = cnt++;
}void spfa(int src, int *d)
{queue<int> q;bool inq[maxn] = {0};for(int i = 1; i <= n; i++) d[i] = (i == src)?0:INF;q.push(src);while(!q.empty()){int x = q.front(); q.pop();inq[x] = 0;for(int e = first[x]; e != -1; e = edge[e].next){int v = edge[e].v, w = edge[e].w;if(d[v] > d[x] + w){d[v] = d[x] + w;if(!inq[v]){inq[v] = 1;q.push(v);}}}}
}void init()
{cnt = 0;memset(first, -1, sizeof(first));
}struct Point
{double x, y;double R;
}A[maxn];const double eps = 1e-8;double sqr(double x) { return x*x; }
double Dist(Point a, Point b) { return sqrt(sqr(a.x-b.x) + sqr(a.y-b.y)); }int dcmp(double x) { if(fabs(x) < eps) return 0; else return x < 0? -1 : 1; }void read_case()
{init();scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%lf%lf%lf", &A[i].x, &A[i].y, &A[i].R);for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++) if(i != j){double t = Dist(A[i], A[j]);if(dcmp(t-A[i].R-A[j].R) <= 0) read_graph(i, j, 1), read_graph(j, i, 1);}}
}void solve()
{read_case();spfa(1, d1); spfa(2, d2); spfa(3, d3);int ans = INF;for(int i = 1; i <= n; i++){if(d1[i] != INF && d2[i] != INF && d3[i] != INF)ans = min(ans, d1[i]+d2[i]+d3[i]);}if(ans < INF) printf("%d\n", n-ans-1);else printf("-1\n");
}int main()
{int T;scanf("%d", &T);while(T--){solve();}return 0;
}

转载于:https://www.cnblogs.com/Buck-Meister/archive/2013/04/28/3049585.html

HDU 3832 Earth Hour相关推荐

  1. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  2. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  3. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  4. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  5. kk_想要学习的知识

    2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...

  6. 图论练习题(存起来练)

    =============================以下是最小生成树+并查集======================================  [HDU]  1213 How Man ...

  7. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

  8. 最短路径问题经典题目汇总

    50道数据结构最短路径问题 HDU 1142 http://acm.hdu.edu.cn/showproblem.php?pid=1142 HDU 1217 http://acm.hdu.edu.cn ...

  9. hdu 2594 kmp

    这个题和kmp算法的共同点,也就是可以用kmp解的原因,在于当前缀所在串(kmp中的模式串)字符pj≠后缀所在串(kmp中文本串)字符tj时,应使前缀串(kmp中模式串)尽量往右移动最大位移,而暴力算 ...

最新文章

  1. 利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签
  2. OpenCV resize函数源码解析——加速方法
  3. 解决python2.7 UnicodeEncodeError报错
  4. 海淀城市大脑建设单位“中海纪元”调研“智源研究院”
  5. c++ 大数类 大数模板
  6. POJ 3615 floyd 求任意起点终点的最短路
  7. smzdm 扫地机器人_堪称米家最值!米家系列扫地机器人选购须知
  8. 【OpenCV】OpenCV实战从入门到精通之 -- 基本图像绘制
  9. Hyperledger发布Burrow新版本,改进集成和开发体验
  10. Unity lightmap shader
  11. 能写个简单的oa系统java_基于jsp的轻量级OA系统-JavaEE实现轻量级OA系统 - java项目源码...
  12. 用户'MYCOMPUTER\ASPNET' 登录失败”的解决方法
  13. LinkedList的线程安全解决办法
  14. 鼠标钩子WH_MOUSE_LL
  15. 程序员应该掌握的英语词汇
  16. mysql explain 类似_Oracle有没有类似MySQL中的explain功能
  17. 办公台式计算机配置费用,原来这才是办公台式机需要的性能?
  18. 领域驱动设计系列文章(1)——通过现实例子显示领域驱动设计的威力
  19. Android 图像识别之OCR识别身份证,银行卡等证件信息
  20. ElasticSearch7.10配置Search-Guard之配置用户

热门文章

  1. 虚拟服务器的外部跟内部端口,虚拟服务器设置 外部端口
  2. (1)非对称加密——RSA——史上最通俗的小白可看懂!
  3. 华为鸿蒙HarmonyOS,华为鸿蒙HarmonyOS-系统概述
  4. c语言规定学号长度,c语言第1-9章基本概念练习题ans(最全).docx
  5. linux shell 十进制转十六进制_问1得10:shell十进制转换到任意进制,多大事儿,一行搞定!
  6. csr 蓝牙驱动_双11来临之际,推荐几款无线蓝牙耳机吧
  7. ajax返回功能,jquery – 记得ajax在点击返回按钮时添加的数据
  8. android测试测试什么,1,web测试,Android测试,Ios测试的共同点与
  9. Python-Matplotlib可视化(6)——自定义坐标轴让统计图清晰易懂
  10. jdom解析xml文件_JDOM编辑XML文件示例