题意

给出n个炸弹的信息 :坐标x , 坐标y , 爆炸半径 , 成本:

如果一个炸弹被引爆那这个范围的都爆炸 , 问最小的成本是多少?

题意:首先先来个n^2 暴力出某个炸弹爆炸波及的其他炸弹,用一条有向边来连接 , 然后找到强连通分量 ,缩点 , 就可以形成一张新的有向图 , 那是不是就是所有没有点连接的点也就是入度为0 的点的权值和呀。想下某个炸弹只有出去的,没有进来的是不是必须得爆炸 。好这道题就可以ac了 ,

比赛的时候可能比较蒙蔽 ,强连通的性质没有想清楚 , 想到是强连通 , 但想的不够深入呀

/* ***********************************************
Author :angon
************************************************ */
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <stack>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define showtime fprintf(stderr,"time = %.15f\n",clock() / (double)CLOCKS_PER_SEC)
#define lld %I64d
#define REP(i,k,n) for(int i=k;i<n;i++)
#define REPP(i,k,n) for(int i=k;i<=n;i++)
#define scan(d) scanf("%d",&d)
#define scanl(d) scanf("%I64d",&d)
#define scann(n,m) scanf("%d%d",&n,&m)
#define scannl(n,m) scanf("%I64d%I64d",&n,&m)
#define mst(a,k) memset(a,k,sizeof(a))
#define LL long long
#define N 1005
#define mod 1000000007
inline int read(){int s=;char ch=getchar();for(; ch<''||ch>''; ch=getchar());for(; ch>=''&&ch<=''; ch=getchar())s=s*+ch-'';return s;} struct Edge
{
int v,next;
}edge[N*N];
int head[N],tot;
int belong[N],Stack[N],inStack[N];
int low[N],dfn[N];
int scc,TimeN,top;
int in[N];
LL x[N],y[N],r[N];
int c[N];
void addedge(int u,int v)
{
edge[tot].v=v; edge[tot].next=head[u]; head[u] = tot++;
} void tarjan(int u)
{
dfn[u] = low[u] = ++TimeN;
Stack[top++] = u;
inStack[u] = ;
for(int i=head[u]; ~i; i=edge[i].next)
{
int v=edge[i].v;
if(!dfn[v])
{
tarjan(v);
low[u] = min(low[u],low[v]);
}
else if(inStack[v])
low[u] = min(low[u],dfn[v]);
}
if(dfn[u]==low[u])
{
int v;
scc++;
do
{
v = Stack[--top];
inStack[v] = ;
belong[v] = scc;
}while(v!=u);
}
} void init()
{
mst(head,-); tot=;
mst(inStack,); mst(dfn,);
scc = top = TimeN = ;
mst(in,);
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
int t,cas=;
scan(t);
while(t--)
{
scan(n);
init();
REPP(i,,n)
{
scannl(x[i],y[i]);
scanl(r[i]);
scan(c[i]);
}
REPP(i,,n)
{
for(int j=;j<=n;j++)
{
if(i==j) continue;
if(sqrt( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j])) <= r[i])
addedge(i,j);
}
}
REPP(u,,n)
if(!dfn[u])
tarjan(u);
REPP(u,,n)
{
for(int i=head[u]; ~i; i=edge[i].next)
{
int v=edge[i].v;
if(belong[u]==belong[v]) continue;
//out[belong[u]]++;
in[belong[v]]++;
}
}
int ans=;
REPP(i,,scc)
{
if(in[i]==)
{
int tmp = 1e5;
for(int j = ;j<=n;j++)
{
if(belong[j] == i)
{
//printf("%d belong %d\n",j ,i);
tmp = min(tmp,c[j]);
}
}
ans += tmp;
}
}
printf("Case #%d: %d\n",cas++,ans);//max(r,c)); }
return ;
}

HDU 5934 (强连同分量+缩点)的更多相关文章

  1. HDU 5934 强联通分量

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

  2. HDU 3639 Hawk-and-Chicken(强连通分量+缩点)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013480600/article/details/32140501 HDU 3639 Hawk-a ...

  3. 【强联通分量缩点】【Tarjan】bzoj1051 [HAOI2006]受欢迎的牛

    就是看是否有一些点,从其他任何点出发都可到达 定理:有向无环图中唯一出度为0的点,一定可以由任何点出发均可达. 所以缩点,若出度为零的点(强联通分量)唯一,则答案为该强联通分量中点的度数. 若不唯一, ...

  4. 【强联通分量缩点】【最长路】【spfa】CH Round #59 - OrzCC杯NOIP模拟赛day1 队爷的讲学计划

    10分算法:对于城市网络为一条单向链的数据, 20分算法:对于n<=20的数据,暴力搜出所有的可能路径. 结合以上可以得到30分. 60分算法:分析题意可得使者会带着去的城市也就是这个城市所在强 ...

  5. Tarjan求强联通分量+缩点

    提到Tarjan算法就不得不提一提Tarjan这位老人家 Robert Tarjan,计算机科学家,以LCA.强连通分量等算法闻名.他拥有丰富的商业工作经验,1985年开始任教于普林斯顿大学.Tarj ...

  6. 【最小割】【Dinic】【强联通分量缩点】bzoj1797 [Ahoi2009]Mincut 最小割

    结论: 满足条件一:当一条边的起点和终点不在 残量网络的 一个强联通分量中.且满流. 满足条件二:当一条边的起点和终点分别在 S 和 T 的强联通分量中.且满流.. 网上题解很多的. #include ...

  7. HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))

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

  8. 【强联通分量缩点】【最短路】【spfa】bzoj1179 [Apio2009]Atm

    缩点后转化成 DAG图上的单源最长路问题.spfa/dp随便. #include<cstdio> #include<queue> #include<algorithm&g ...

  9. 【强联通分量缩点】【搜索】bzoj2208 [Jsoi2010]连通数

    两次dfs缩点,然后n次dfs暴搜. #include<cstdio> #include<vector> #include<cstring> using names ...

随机推荐

  1. hibernate的子查询

    hibernate原话 HQL supports subqueries in the where clause. We can't think of many good uses for subque ...

  2. sys模块 进度条百分比

    用于提供对Python解释器相关的操作: sys.argv           命令行参数List,第一个元素是程序本身路径 sys.exit(n)        退出程序,正常退出时exit(0) ...

  3. CentOS 7 下设置DNS

    在CentOS 7下,手工设置 /etc/resolv.conf 里的DNS,过了一会,发现被系统重新覆盖或者清除了.和CentOS 6下的设置DNS方法不同,有几种方式: 1.使用全新的命令行工具 ...

  4. Python01 python入门介绍

    1 python简介 1.1 为什么学python python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van ...

  5. 05 HTML字符串转换成jQuery对象、绑定数据到元素上

    1 要求 将一段 HTML脚本 封装成一个字符串,将这个字符串转换成一个jQuery对象:然后将这个jQuery对象添加到指定的元素中去 2 步骤 定义字符串 var str = '<div i ...

  6. UTF8转unicode说明

    1.最新版iconv中的char *encTo = "UNICODE//IGNORE"; 是没有这个字符串的,它里面有UNICODELITTLE 和 UNICODEBIG 而且是没 ...

  7. chrome安装postman插件

    参考http://www.cnplugins.com/zhuanti/how-to-make-crx-install.html 下载地址:http://www.cnplugins.com/down/p ...

  8. 在ubuntu 14.04 编译android 2.3.1 错误解决办法

    首先必须降低gcc版本: sudo apt-get install gcc-4.4sudo apt-get install g++-4.4sudo rm -rf /usr/bin/gcc /usr/b ...

  9. 读取txt文件的简易算法

    网友在问,从一个文本文件(txt)读取数据,并做简易算法.网友的原问题大约如下, 网友的问题,虽然说是全部是数字,但没有说明是否只有一行.因此Insus.NET在实现算法时,处理文本文件是否多行,是否 ...

  10. jmeter:dubbo接口测试

    最近工作中接到一个需求,需要对一个MQ消息队列进行性能测试,测试其消费能力,开发提供了一个dubbo服务来供我调用发送消息. 这篇博客,介绍下如何利用jmeter来测试dubbo接口,并进行性能测试. ...