Bomb HDU - 5934 (Tarjan)
#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lowbit(x) (x & (-x)) typedef unsigned long long int ull;
typedef long long int ll;
const double pi = 4.0*atan(1.0);
const int inf = 0x3f3f3f3f;
const int maxn = ;
const int maxm = ;
const int mod = ;
using namespace std; int n, m, tol, T;
int cnt, top, sz;
struct Edge {
ll x;
ll y;
ll r;
ll w;
};
struct Node {
int u;
int v;
int next;
};
Node node[maxm];
Edge edge[maxn];
int head[maxn];
int dfn[maxn];
int low[maxn];
int fath[maxn];
int sta[maxn];
bool vis[maxn];
int point[maxn];
int ind[maxn];
ll cost[maxn]; void init() {
cnt = tol= top = sz = ;
memset(ind, , sizeof ind);
memset(sta, , sizeof sta);
memset(dfn, , sizeof(dfn));
memset(low, , sizeof(low));
memset(fath, , sizeof(fath));
memset(head, -, sizeof(head));
memset(cost, inf, sizeof cost);
memset(point, , sizeof point);
memset(vis, false, sizeof(vis));
} ll calc(int i, int j) {
ll x1 = edge[i].x;
ll x2 = edge[j].x;
ll y1 = edge[i].y;
ll y2 = edge[j].y;
ll ans = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
return ans;
} void addnode(int u, int v) {
node[tol].u = u;
node[tol].v = v;
node[tol].next = head[u];
head[u] = tol++;
} void dfs(int u) {
int v;
dfn[u] = low[u] = ++cnt;
sta[sz++] = u;
vis[u] = true;
for(int i=head[u]; ~i; i=node[i].next) {
v = node[i].v;
if(!dfn[v]) {
dfs(v);
low[u] = min(low[u], low[v]);
} else if(vis[v]) {
low[u] = min(low[u], dfn[v]);
}
}
if(low[u] == dfn[u]) {
++top;
do{
v = sta[--sz];
vis[v] = false;
point[v] = top;
} while(v != u);
}
} void tarjan() {
for(int u=; u<=n; u++) {
if(!dfn[u]) dfs(u);
}
} void solve() {
for(int u=; u<=n; u++) {
for(int i=head[u]; ~i; i=node[i].next) {
int v = node[i].v;
if(point[u] != point[v]) ind[point[v]]++;
}
}
} int main() {
scanf("%d", &T);
int cas = ;
while(T--) {
init();
scanf("%d", &n);
for(int i=; i<=n; i++) scanf("%lld%lld%lld%lld", &edge[i].x, &edge[i].y, &edge[i].r, &edge[i].w);
for(int i=; i<=n; i++) {
for(int j=; j<=n; j++) {
if(i == j) continue;
ll a = edge[i].r * edge[i].r;
ll b = calc(i, j);
if(a >= b) addnode(i, j);
}
}
tarjan();
// for(int i=1; i<=n; i++) printf("%d %d\n", i, point[i]);
solve();
// for(int i=1; i<=n; i++) printf("%d %d\n", i, ind[point[i]]);
for(int i=; i<=n; i++) {
if(!ind[point[i]]) {
cost[point[i]] = min(cost[point[i]], edge[i].w);
}
}
ll ans = ;
for(int i=; i<=top; i++) {
if(!ind[i]) ans += cost[i];
}
printf("Case #%d: %lld\n", cas++, ans);
}
return ;
}
给出n个炸弹,然后炸弹有爆炸范围,当一个炸弹爆炸的时候,这个范围内的其他炸弹也会爆炸,所以我们可以把可以相互引爆的炸弹缩成一个点,然后对于缩完以后的点,如果我缩完点的点,判断他的入度,如果我的入度不为0,说明我这个点里面的小点可以通过别的炸弹引爆它,那就没必要去炸它了,如果我的入度是0的话,我就需要手动引爆,然后去找这个点里面的小的点的引爆的最小值,然后加起来就可以了
Bomb HDU - 5934 (Tarjan)的更多相关文章
- Equivalent Sets HDU - 3836 (Tarjan)
题目说给出一些子集,如果A是B的子集,B是A的子集,那么A和B就是相等的,然后给出n个集合m个关系,m个关系表示u是v的子集,问你最小再添加多少个关系可以让这n个集合都是相等的 如果这n个几个都是互相 ...
- Bomb HDU - 3555 (数位DP)
Bomb HDU - 3555 (数位DP) The counter-terrorists found a time bomb in the dust. But this time the terro ...
- 【BZOJ4331】[JSOI2012]越狱老虎桥(Tarjan)
[BZOJ4331][JSOI2012]越狱老虎桥(Tarjan) 题面 BZOJ 然而BZOJ是权限题QwQ 洛谷 题解 先求出所有割边,那么显然要割掉一条割边. 如果要加入一条边,那么显然是把若干 ...
- 【BZOJ2208】[JSOI2010]连通数(Tarjan)
[BZOJ2208][JSOI2010]连通数(Tarjan) 题面 BZOJ 洛谷 题解 先吐槽辣鸡洛谷数据,我写了个\(O(nm)\)的都过了. #include<iostream> ...
- 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 ...
- D - 淡黄的长裙 HDU - 4221(贪心)
D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...
- 浅谈强连通分量(Tarjan)
强连通分量\(\rm (Tarjan)\) --作者:BiuBiu_Miku \(1.\)一些术语 · 无向图:指的是一张图里面所有的边都是双向的,好比两个人打电话 \(U ...
- hdu---(3555)Bomb(数位dp(入门))
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submi ...
- hdu 5055(坑)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5055 Bob and math problem Time Limit: 2000/1000 MS ( ...
随机推荐
- SQL UPDATE with INNER JOIN
mysql - SQL UPDATE with INNER JOIN - Stack Overflowhttps://stackoverflow.com/questions/14491042/sql- ...
- 文件搜索神器之everything
之前我提到了,在本地快速的进行文件的检索是平常工作中必要的部分,一个好的搜索软件会大大的提升我们的工作效率.就是它,everything,官方的网站地址是http://www.voidtools.co ...
- python3 网页下拉框和悬浮框操作基础汇总
#悬浮定位操作 from selenium.webdrier import ActionChains #浏览器实例化 #定位移动的位置赋给一个参数 ActionChains(浏览器).move_to_ ...
- 【转】解决Maxwell发送Kafka消息数据倾斜问题
最近用Maxwell解析MySQL的Binlog,发送到Kafka进行处理,测试的时候发现一个问题,就是Kafka的Offset严重倾斜,三个partition,其中一个的offset已经快200万了 ...
- python函数、模块、包
一.函数 定义函数: def fun_name(para_list): coding def fun_name(para_list): coding return xxx 使用函数,fun_name( ...
- k8s使用Glusterfs动态生成pv
一.环境介绍 [root@k8s-m ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4 ...
- 常见IT工具软件总结
1. 阿里云在线迁移服务 2.智能媒体管理 格式转换 业务域名管理 1. 每个业务有一个英文单词, 1. 每个 git 的命名应该是 chgg-业务英文-种类 2. 例如 chgg-plant-api ...
- python数学第六天【指数族】
- Linq:使用Take和Skip实现分页
Skip,Take: list = list.Skip(pageNum * pageSize).Take(pageSize).ToList(); pageSize :表示一页多少条. pageNum: ...
- 【python练习题】程序2
2.题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40 ...