题意:

坐标系上有n个炸弹,每个炸弹都有不同的爆炸半径,并且爆炸会引起连锁反应,如果一个炸弹爆炸,那么在这个炸弹的爆炸半径内所有的炸弹都会跟着引爆,你要引爆所有的炸弹,引爆每个炸弹都有不同的引爆代价,求最小代价

如果B在A的爆炸半径内,那么A到B连接一条有向边

之后强连通分量+缩点形成一张有向无环图

很显然只要点燃所有入度为0的点中最便宜的炸弹就好了

#include<stdio.h>
#include<string.h>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
#define LL long long
vector<LL> G[1005], Gp[1005];
stack<LL> st;
typedef struct
{LL x;LL y;LL r;LL pri;
}Point;
Point s[1005];
LL t, cnt, time[1005], low[1005], vis[1005], scc[1005], cost[1005];
void Trajan(LL x)
{LL i, v;vis[x] = 1;low[x] = time[x] = ++t;st.push(x);for(i=0;i<G[x].size();i++){v = G[x][i];if(vis[v]==0){Trajan(v);low[x] = min(low[x], low[v]);}else if(scc[v]==0)low[x] = min(low[x], time[v]);}if(low[x]==time[x]){cnt++;while(st.empty()==0){v = st.top();st.pop();scc[v] = cnt;cost[cnt] = min(cost[cnt], s[v].pri);if(v==x)break;}}
}
void Sech(LL x)
{LL i, v;vis[x] = 1;for(i=0;i<Gp[x].size();i++){v = Gp[x][i];if(vis[v]==0)Sech(v);}
}
int main(void)
{LL T, n, i, j, v, ans, cas = 1;scanf("%lld", &T);while(T--){scanf("%lld", &n);for(i=1;i<=n;i++){G[i].clear();Gp[i].clear();scanf("%lld%lld%lld%lld", &s[i].x, &s[i].y, &s[i].r, &s[i].pri);}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==j)continue;if((s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y)<=s[i].r*s[i].r)G[i].push_back(j);}}cnt = t = 0;memset(vis, 0, sizeof(vis));memset(scc, 0, sizeof(scc));memset(cost, 62, sizeof(cost));for(i=1;i<=n;i++){if(vis[i]==0)Trajan(i);}for(i=1;i<=n;i++){for(j=0;j<G[i].size();j++){v = G[i][j];if(scc[i]!=scc[v])Gp[scc[i]].push_back(scc[v]);}}ans = 0;memset(vis, 0, sizeof(vis));for(i=cnt;i>=1;i--){if(vis[i]==0){ans += cost[i];Sech(i);}}printf("Case #%lld: %lld\n", cas++, ans);}return 0;
}

HDU 5934 2016CCPC杭州 B: Bomb(Trajan强连通)相关推荐

  1. HDU 5942 2016CCPC杭州 J: Just a Math Problem(莫比乌斯函数)

    题意: 已知f(k)为k的质因子数 求∑2^f(k)  (1<=k<=n) 发现现在做什么题程序都特别慢...14866/15000ms真刺激 因为f(k)是k的质因子个数 那么2^f(k ...

  2. HDU 5937 2016CCPC杭州 E: Equation(DFS)

    题意: 你有'0'-'9'这9个数字各xi个,问同时能用这些数字组成少个不同的等式 等式形如:A+B=C,其中每个字母都是1个数字,并且1+2=3和2+1=3算不同情况 总共只有36种不同算式,当数据 ...

  3. HDU 5936 2016CCPC杭州 D: Difference(折半枚举)

    题意: 给你x和k,问你有多少个y满足题上的两个公式 y的位数不会超过10位,因为如果超过十位的话f(y, k)-y一定是个负数 比如假设y是11位,那么f(y, k)最大值是9^9*11它只有10位 ...

  4. HDU 5943 2016CCPC杭州 K: Kingdom of Obsession(二分匹配)

    题意:给你一张二分图,左边是s+1到s+n这n个数,右边是1到n这n个数 如果x在左边,y在右边,且x%y==0,那么x可以和y匹配,问这个二分图是否存在完美匹配 如果左边有两个以上的质数出现,那么一 ...

  5. HDU 5935 2016CCPC杭州 C: Car

    这题题意好难懂: 有一辆速度只会越来越快的车,一开始速度为0,并且在坐标为0的点上,之后开始向右加速 中间会进行n次检查,第i次检查ci,表示在某个时间(刚好是整点)汽车刚好到了某个整点坐标上 求汽车 ...

  6. HDU 5938 2016CCPC杭州 F: Four Operations

    题意: 将+-x/四个符号按顺序塞入一串字符中,让它成为一个表达式 求表达式能得到的最大值 枚举'-'的位置,'x'一定挨着'-'的后面,'/'一定挨着'x'的后面 然后'+'的位置要不在'-'的前面 ...

  7. HDU 5933 2016CCPC杭州 A: ArcSoft's Office Rearrangement

    题意: 有n个数,每次可以将相邻的两个数合并成一个更大的数,也可以将一个数拆分成两个不为0的数 问至少经过多少次操作可以使最终序列为k个一样大的数,如果不可能做到输出-1 当所有数的和不是k的倍数就是 ...

  8. HDU 5934:Bomb(强连通缩点)

    http://acm.hdu.edu.cn/showproblem.php?pid=5934 题意:有N个炸弹,每个炸弹有一个坐标,一个爆炸范围和一个爆炸花费,如果一个炸弹的爆炸范围内有另外的炸弹,那 ...

  9. 【HDU - 5934】Bomb (强连通分量Tarjan + 缩点)

    题干: There are NN bombs needing exploding. Each bomb has three attributes: exploding radius riri, pos ...

最新文章

  1. 粒子滤波到底是怎么得到的?
  2. 进程中dll模块的隐藏
  3. abap table control里面各种属性和事件的写法
  4. boost::mp11::mp_map_update相关用法的测试程序
  5. 基础 - 结构体大小计算
  6. 批处理写入以及动态与参数化SQL,数据库的性能如何?
  7. 编程题【System类】计算一千万个数添加到集合的时间
  8. Python 3.8 已发布,现在是切换至新版本的好时机吗?
  9. NSRange类详解
  10. 一个小故事读懂Memcached漏洞
  11. laravel安装说明
  12. 算法图解第八章笔记与习题(贪婪算法)
  13. 三次样条插值的缺点_三次样条插值函数
  14. matlab实现多目标测试集ZDT、DTLZ、MOP的最优理论前沿
  15. 89c52汇编语言实现跑马灯,汇编语言实现24个跑马灯制作
  16. 非线性光学散射偏微分方程组的matlab求解仿真
  17. [免费参加] 2015微软社区大课堂Community Camp开放报名啦!
  18. Power BI——地图可视化(气泡地图Bubble Map)
  19. 学生端android版二1班,一起作业学生端安卓版
  20. 《图解HTTP》阅读笔记

热门文章

  1. 启达传媒-微信小程序|微信小程序工具|微信小程序开发|微信小程序制作
  2. Vue源码分析 - observer.js
  3. 创业冲突的五种解决方法是_当创始合伙人发生冲突时,最好的解决方法4和5
  4. TypeScript简介
  5. 【深度优先搜索/树】计蒜客:族谱
  6. 【linux笔记】常用命令(2)目录
  7. 【java笔记】File类(3):FileFilter文件过滤器原理和使用
  8. 【数据结构和算法笔记】图的相关概念(有向图,无向图......)
  9. [投稿]一个频域语音降噪算法实现及改进方法
  10. 表必须要有主键吗_玄关隔断什么材质好?玄关隔断必须要做吗