1. #include<map>
  2. #include<set>
  3. #include<ctime>
  4. #include<cmath>
  5. #include<stack>
  6. #include<queue>
  7. #include<string>
  8. #include<vector>
  9. #include<cstdio>
  10. #include<cstdlib>
  11. #include<cstring>
  12. #include<iostream>
  13. #include<algorithm>
  14. #define lowbit(x) (x & (-x))
  15.  
  16. typedef unsigned long long int ull;
  17. typedef long long int ll;
  18. const double pi = 4.0*atan(1.0);
  19. const int inf = 0x3f3f3f3f;
  20. const int maxn = ;
  21. const int maxm = ;
  22. const int mod = ;
  23. using namespace std;
  24.  
  25. int n, m, tol, T;
  26. int cnt, top, sz;
  27. struct Edge {
  28. ll x;
  29. ll y;
  30. ll r;
  31. ll w;
  32. };
  33. struct Node {
  34. int u;
  35. int v;
  36. int next;
  37. };
  38. Node node[maxm];
  39. Edge edge[maxn];
  40. int head[maxn];
  41. int dfn[maxn];
  42. int low[maxn];
  43. int fath[maxn];
  44. int sta[maxn];
  45. bool vis[maxn];
  46. int point[maxn];
  47. int ind[maxn];
  48. ll cost[maxn];
  49.  
  50. void init() {
  51. cnt = tol= top = sz = ;
  52. memset(ind, , sizeof ind);
  53. memset(sta, , sizeof sta);
  54. memset(dfn, , sizeof(dfn));
  55. memset(low, , sizeof(low));
  56. memset(fath, , sizeof(fath));
  57. memset(head, -, sizeof(head));
  58. memset(cost, inf, sizeof cost);
  59. memset(point, , sizeof point);
  60. memset(vis, false, sizeof(vis));
  61. }
  62.  
  63. ll calc(int i, int j) {
  64. ll x1 = edge[i].x;
  65. ll x2 = edge[j].x;
  66. ll y1 = edge[i].y;
  67. ll y2 = edge[j].y;
  68. ll ans = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
  69. return ans;
  70. }
  71.  
  72. void addnode(int u, int v) {
  73. node[tol].u = u;
  74. node[tol].v = v;
  75. node[tol].next = head[u];
  76. head[u] = tol++;
  77. }
  78.  
  79. void dfs(int u) {
  80. int v;
  81. dfn[u] = low[u] = ++cnt;
  82. sta[sz++] = u;
  83. vis[u] = true;
  84. for(int i=head[u]; ~i; i=node[i].next) {
  85. v = node[i].v;
  86. if(!dfn[v]) {
  87. dfs(v);
  88. low[u] = min(low[u], low[v]);
  89. } else if(vis[v]) {
  90. low[u] = min(low[u], dfn[v]);
  91. }
  92. }
  93. if(low[u] == dfn[u]) {
  94. ++top;
  95. do{
  96. v = sta[--sz];
  97. vis[v] = false;
  98. point[v] = top;
  99. } while(v != u);
  100. }
  101. }
  102.  
  103. void tarjan() {
  104. for(int u=; u<=n; u++) {
  105. if(!dfn[u]) dfs(u);
  106. }
  107. }
  108.  
  109. void solve() {
  110. for(int u=; u<=n; u++) {
  111. for(int i=head[u]; ~i; i=node[i].next) {
  112. int v = node[i].v;
  113. if(point[u] != point[v]) ind[point[v]]++;
  114. }
  115. }
  116. }
  117.  
  118. int main() {
  119. scanf("%d", &T);
  120. int cas = ;
  121. while(T--) {
  122. init();
  123. scanf("%d", &n);
  124. for(int i=; i<=n; i++) scanf("%lld%lld%lld%lld", &edge[i].x, &edge[i].y, &edge[i].r, &edge[i].w);
  125. for(int i=; i<=n; i++) {
  126. for(int j=; j<=n; j++) {
  127. if(i == j) continue;
  128. ll a = edge[i].r * edge[i].r;
  129. ll b = calc(i, j);
  130. if(a >= b) addnode(i, j);
  131. }
  132. }
  133. tarjan();
  134. // for(int i=1; i<=n; i++) printf("%d %d\n", i, point[i]);
  135. solve();
  136. // for(int i=1; i<=n; i++) printf("%d %d\n", i, ind[point[i]]);
  137. for(int i=; i<=n; i++) {
  138. if(!ind[point[i]]) {
  139. cost[point[i]] = min(cost[point[i]], edge[i].w);
  140. }
  141. }
  142. ll ans = ;
  143. for(int i=; i<=top; i++) {
  144. if(!ind[i]) ans += cost[i];
  145. }
  146. printf("Case #%d: %lld\n", cas++, ans);
  147. }
  148. return ;
  149. }

给出n个炸弹,然后炸弹有爆炸范围,当一个炸弹爆炸的时候,这个范围内的其他炸弹也会爆炸,所以我们可以把可以相互引爆的炸弹缩成一个点,然后对于缩完以后的点,如果我缩完点的点,判断他的入度,如果我的入度不为0,说明我这个点里面的小点可以通过别的炸弹引爆它,那就没必要去炸它了,如果我的入度是0的话,我就需要手动引爆,然后去找这个点里面的小的点的引爆的最小值,然后加起来就可以了

Bomb HDU - 5934 (Tarjan)的更多相关文章

  1. Equivalent Sets HDU - 3836 (Tarjan)

    题目说给出一些子集,如果A是B的子集,B是A的子集,那么A和B就是相等的,然后给出n个集合m个关系,m个关系表示u是v的子集,问你最小再添加多少个关系可以让这n个集合都是相等的 如果这n个几个都是互相 ...

  2. Bomb HDU - 3555 (数位DP)

    Bomb HDU - 3555 (数位DP) The counter-terrorists found a time bomb in the dust. But this time the terro ...

  3. 【BZOJ4331】[JSOI2012]越狱老虎桥(Tarjan)

    [BZOJ4331][JSOI2012]越狱老虎桥(Tarjan) 题面 BZOJ 然而BZOJ是权限题QwQ 洛谷 题解 先求出所有割边,那么显然要割掉一条割边. 如果要加入一条边,那么显然是把若干 ...

  4. 【BZOJ2208】[JSOI2010]连通数(Tarjan)

    [BZOJ2208][JSOI2010]连通数(Tarjan) 题面 BZOJ 洛谷 题解 先吐槽辣鸡洛谷数据,我写了个\(O(nm)\)的都过了. #include<iostream> ...

  5. A * B Problem Plus HDU - 1402 (FFT)

    A * B Problem Plus HDU - 1402 (FFT) Calculate A * B.  InputEach line will contain two integers A and ...

  6. D - 淡黄的长裙 HDU - 4221(贪心)

    D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...

  7. 浅谈强连通分量(Tarjan)

    强连通分量\(\rm (Tarjan)\)             --作者:BiuBiu_Miku \(1.\)一些术语   · 无向图:指的是一张图里面所有的边都是双向的,好比两个人打电话 \(U ...

  8. hdu---(3555)Bomb(数位dp(入门))

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submi ...

  9. hdu 5055(坑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5055 Bob and math problem Time Limit: 2000/1000 MS ( ...

随机推荐

  1. Golang中进行reslice时的注意事项

    先看下面代码: package main import "fmt" func main() { slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} ...

  2. 四、Object.defineProperty总结

    Object.defineProperty() 参考:https://segmentfault.com/a/1190000007434923 定义: 方法会直接在一个对象上定义一个新属性,或者修改一个 ...

  3. CentOS7安装Jenkins自动化部署maven项目

    前言: 最近要弄一个jenkins工具,已经安装好了并且jenkins使用部署项目的流程已经基本走通,上图: 话不多说,开始 第一步:安装jenkins: [ 准备环境: 在centOS7环境上:安装 ...

  4. dart正则

    1.前言 API中对于正则表达式的注释是:正则表达式的规范和语义与JavaScript相同详细的规范可以参考:http://ecma-international.org/ecma-262/5.1/#s ...

  5. keras中TimeDistributed的用法

    TimeDistributed这个层还是比较难理解的.事实上通过这个层我们可以实现从二维像三维的过渡,甚至通过这个层的包装,我们可以实现图像分类视频分类的转化. 考虑一批32个样本,其中每个样本是一个 ...

  6. vue ajax

    局部get: this.$http.get(url,{param:jsonData}).then(successCallback,failCallBack) 局部post: this.$http.po ...

  7. hdu-2222(ac自动机模板)

    题意:给你一个长度为n的单词表,一个文本串,问你这个文本串中出现了单词表中多少个单词: 解题思路:ac自动机的模板题,可以直接当模板用: 代码: #include<iostream> #i ...

  8. hdu-1421(dp)

    解题思路:dp[i][j]表示前i个物品中取k对所要的最小花费: 首先得对物品进行处理,因为需要当前物品减前一个物品的平方和最小: 所以先排序,因为排序的相邻两个的差的平方一定最小: 然后转移方程:d ...

  9. BZOJ3291Alice与能源计划——匈牙利算法+模拟费用流

    题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验.为 了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...

  10. [NOIp2016] 蚯蚓

    类型:单调队列 传送门:>Here< 题意:有$N$只蚯蚓,每秒都会伸长$q$.每一次都会有人选出最长的一条切成两半,长度分别是$\left \lfloor px \right \rflo ...