Bomb

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1853    Accepted Submission(s): 608

Problem Description
There are N bombs needing exploding.

Each bomb has three attributes: exploding radius ri, position (xi,yi) and lighting-cost ci which means you need to pay ci cost making it explode.

If a un-lighting bomb is in or on the border the exploding area of another exploding one, the un-lighting bomb also will explode.

Now you know the attributes of all bombs, please use the minimum cost to explode all bombs.

 
Input
First line contains an integer T, which indicates the number of test cases.

Every test case begins with an integers N, which indicates the numbers of bombs.

In the following N lines, the ith line contains four intergers xi, yi, ri and ci, indicating the coordinate of ith bomb is (xi,yi), exploding radius is ri and lighting-cost is ci.

Limits
- 1≤T≤20
- 1≤N≤1000
- −108≤xi,yi,ri≤108
- 1≤ci≤104

 
Output
For every test case, you should output 'Case #x: y', where x indicates the case number and counts from 1 and y is the minimum cost.
 
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
 
Source

思路:将给出的点之间连边,对每个强联通分量去最小值即可。

代码:

 ```C++
#include<bits/stdc++.h>
//#include<regex>
#define db double
#include<vector>
#define ll long long
#define vec vector<ll>
#define Mt vector<vec>
#define ci(x) scanf("%d",&x)
#define cd(x) scanf("%lf",&x)
#define cl(x) scanf("%lld",&x)
#define pi(x) printf("%d\n",x)
#define pd(x) printf("%f\n",x)
#define pl(x) printf("%lld\n",x)
#define MP make_pair
#define PB push_back
#define inf 0x3f3f3f3f3f3f3f3f
#define fr(i, a, b) for(int i=a;i<=b;i++)
const int N = 4e6 + ;
const int mod = 1e9 + ;
const int MOD = mod - ;
const db eps = 1e-;
const db PI = acos(-1.0);
using namespace std;
struct P {
int f, to, nxt;
} e[N]; struct PP {
int x, y, r, c;
} a[N];
int hea[];
int n, cnt, sig, tt, cont;
int deg[], sta[], col[], vis[], low[], dfn[], need[], contz[]; void add(int f, int to) {//建边
e[cont].to = to;
e[cont].f = f;
e[cont].nxt = hea[f];
hea[f] = cont++;
} void tarjan(int u) {//强联通分量
vis[u] = ;
low[u] = dfn[u] = cnt++;
sta[++tt] = u;
for (int i = hea[u]; i != -; i = e[i].nxt) {
int v = e[i].to;
if (vis[v] == ) tarjan(v);
if (vis[v] == ) low[u] = min(low[u], low[v]);
}
if (dfn[u] == low[u]) {
sig++;
do {
col[sta[tt]] = sig;
vis[sta[tt]] = -;
} while (sta[tt--] != u);
}
} void cal() {
cnt = ;
sig = ;
tt = -;
memset(dfn, , sizeof(dfn));memset(col, , sizeof(col));memset(vis, , sizeof(vis));
memset(sta, , sizeof(sta));memset(low, , sizeof(low));memset(deg, , sizeof(deg));
memset(contz, 0x3f3f3f3f, sizeof(contz));
for (int i = ; i < n; i++) if (!vis[i]) tarjan(i);
for (int i = ; i < cont; i++) {
int u = e[i].f;
int v = e[i].to;
if (col[u] != col[v]) deg[col[v]]++;
}
for (int i = ; i < n; i++) if (!deg[col[i]]) contz[col[i]] = min(contz[col[i]], a[i].c);
int ans = ; for (int i = ; i <= sig; i++) if (!deg[i]) ans += contz[i];
pi(ans);
} int main() {
int t;
ci(t);
for (int ii = ; ii <= t; ii++) {
ci(n);
for (int i = ; i < n; i++) scanf("%d%d%d%d", &a[i].x, &a[i].y, &a[i].r, &a[i].c);
cont = ;
memset(hea, -, sizeof(hea));
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
ll tmp = a[i].x - a[j].x;
ll tmp2 = a[i].y - a[j].y;
ll d1 = tmp * tmp + tmp2 * tmp2;
ll d2 = 1ll * a[i].r * a[i].r;
if (d1 <= d2) add(i, j);
}
}
printf("Case #%d: ", ii);
cal();
}
return ;
} ```
 #include<bits/stdc++.h>
//#include<regex>
#define db double
#include<vector>
#define ll long long
#define vec vector<ll>
#define Mt vector<vec>
#define ci(x) scanf("%d",&x)
#define cd(x) scanf("%lf",&x)
#define cl(x) scanf("%lld",&x)
#define pi(x) printf("%d\n",x)
#define pd(x) printf("%f\n",x)
#define pl(x) printf("%lld\n",x)
#define MP make_pair
#define PB push_back
#define inf 0x3f3f3f3f3f3f3f3f
#define fr(i, a, b) for(int i=a;i<=b;i++)
const int N = 4e6 + ;
const int mod = 1e9 + ;
const int MOD = mod - ;
const db eps = 1e-;
const db PI = acos(-1.0);
using namespace std;
struct P {
int f, to, nxt;
} e[N]; struct PP {
int x, y, r, c;
} a[N];
int hea[];
int n, cnt, sig, tt, cont;
int deg[], sta[], col[], vis[], low[], dfn[], need[], contz[]; void add(int f, int to) {//建边
e[cont].to = to;
e[cont].f = f;
e[cont].nxt = hea[f];
hea[f] = cont++;
} void tarjan(int u) {//强联通分量
vis[u] = ;
low[u] = dfn[u] = cnt++;
sta[++tt] = u;
for (int i = hea[u]; i != -; i = e[i].nxt) {
int v = e[i].to;
if (vis[v] == ) tarjan(v);
if (vis[v] == ) low[u] = min(low[u], low[v]);
}
if (dfn[u] == low[u]) {
sig++;
do {
col[sta[tt]] = sig;
vis[sta[tt]] = -;
} while (sta[tt--] != u);
}
} void cal() {
cnt = ;
sig = ;
tt = -;
memset(dfn, , sizeof(dfn));memset(col, , sizeof(col));memset(vis, , sizeof(vis));
memset(sta, , sizeof(sta));memset(low, , sizeof(low));memset(deg, , sizeof(deg));
memset(contz, 0x3f3f3f3f, sizeof(contz));
for (int i = ; i < n; i++) if (!vis[i]) tarjan(i);
for (int i = ; i < cont; i++) {
int u = e[i].f;
int v = e[i].to;
if (col[u] != col[v]) deg[col[v]]++;
}
for (int i = ; i < n; i++) if (!deg[col[i]]) contz[col[i]] = min(contz[col[i]], a[i].c);
int ans = ; for (int i = ; i <= sig; i++) if (!deg[i]) ans += contz[i];
pi(ans);
} int main() {
int t;
ci(t);
for (int ii = ; ii <= t; ii++) {
ci(n);
for (int i = ; i < n; i++) scanf("%d%d%d%d", &a[i].x, &a[i].y, &a[i].r, &a[i].c);
cont = ;
memset(hea, -, sizeof(hea));
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
ll tmp = a[i].x - a[j].x;
ll tmp2 = a[i].y - a[j].y;
ll d1 = tmp * tmp + tmp2 * tmp2;
ll d2 = 1ll * a[i].r * a[i].r;
if (d1 <= d2) add(i, j);
}
}
printf("Case #%d: ", ii);
cal();
}
return ;
}

HDU 5934 强联通分量的更多相关文章

  1. HDU 5934 (强连同分量+缩点)

    题意: 给出n个炸弹的信息 :坐标x , 坐标y , 爆炸半径 , 成本: 如果一个炸弹被引爆那这个范围的都爆炸 , 问最小的成本是多少? 题意:首先先来个n^2 暴力出某个炸弹爆炸波及的其他炸弹,用 ...

  2. hdu 1269 (强联通分量Tarjan入门)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. HDU 1269 迷宫城堡 【强联通分量(模版题)】

    知识讲解: 在代码里我们是围绕 low 和 dfn 来进行DFS,所以我们务必明白 low 和 dfn 是干什么的? 有什么用,这样才能掌握他.   1.  dfn[]  遍历到这个点的时间 2.   ...

  4. HDU 4685 Prince and Princess(二分匹配+强联通分量)

    题意:婚配问题,但是题目并不要求输出最大匹配值,而是让我们输出,一个王子可以与哪些王妃婚配而不影响最大匹配值. 解决办法:先求一次最大匹配,如果有两个已经匹配的王妃,喜欢她们两个的有两个或者以上相同的 ...

  5. 【强联通图 | 强联通分量】HDU 1269 迷宫城堡 【Kosaraju或Tarjan算法】

      为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明 ...

  6. Kosaraju算法---强联通分量

    1.基础知识 所需结构:原图.反向图(若在原图中存在vi到vj有向边,在反向图中就变为vj到vi的有向边).标记数组(标记是否遍历过).一个栈(或记录顶点离开时间的数组).      算法描叙: :对 ...

  7. [CF #236 (Div. 2) E] Strictly Positive Matrix(强联通分量)

    题目:http://codeforces.com/contest/402/problem/E 题意:给你一个矩阵a,判断是否存在k,使得a^k这个矩阵全部元素都大于0 分析:把矩阵当作01矩阵,超过1 ...

  8. UVa 11324 & 强联通分量+DP

    题意: 一张无向图,求点集使其中任意两点可到达. SOL: 强联通分量中的点要么不选要么全都选,然后缩点DAG+DP 记录一下思路,不想写了...代码满天飞.

  9. BZOJ 1051 & 强联通分量

    题意: 怎么说呢...这种题目有点概括不来....还是到原题面上看好了... SOL: 求出强联通分量然后根据分量重构图,如果只有一个点没有出边那么就输出这个点中点的数目. 对就是这样. 哦还有论边双 ...

随机推荐

  1. Android studio 一些技术添加依赖,依赖库

    Recyclerview compile 'com.android.support:recyclerview-v7:21.0.+' butterKnife 的依赖compile 'com.jakewh ...

  2. MPLS VPN随堂笔记3

    跨域 ASBR之间运行MPBGP 1.配置AS内部IGP保证环回口互相可达,同时建立LDP邻居 (优先启用 mpls label rang 16 100)方便查看实验现象 2.配置PE1-PE2 PE ...

  3. 转:【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17290021 在http://blog.csdn.net/ns_code/article/ ...

  4. 【Alpha阶段】第七次scrum meeting

    一.会议照片 二.会议内容 姓名 学号 负责模块 昨日任务 今日任务 杨爱清 099 界面设计和交互功能 [完成]设计界面 交互功能连接并优化 杨立鑫 100 数据库搭建和其他 [完成]将数据库与其他 ...

  5. 201521123122 《java程序设计》第八周实验总结

    201521123122 <java程序设计>第八周实验总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 List中指定元素的删除(题目4- ...

  6. 201521123061 《Java程序设计》第四周学习总结

    201521123061 <Java程序设计>第四周学习总结 1. 本章学习总结 (1)思维导图: --- (2)上课内容总结: 第四周学习了Java中的继承与多态,思维导图中已经给出了本 ...

  7. 201521123098 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 1. TCP的特征: ①可靠:具有失败重传的功能: ②开销大:需要建立通路以维持通信: ③控制能力较强:有 ...

  8. JAVA课程设计猜数游戏 个人

    1.团队课程设计博客链接 https://i.cnblogs.com/EditPosts.aspx?postid=7067843&update=1 2.个人负责模块说明 输入用户ID 2.主要 ...

  9. 201521123001《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学 ...

  10. java程序设计----学生基本信息管理系统

    1. 团队课程设计博客链接 http://www.cnblogs.com/hyy786030686/p/7063890.html 2. 个人负责模块或任务说明 --登录界面的设计 --用户名和密码验证 ...