题意

给出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. sublime3 There are no packages available for installation

    我的是网上下载的绿色版 1.找到sublime\Data\Packages  删除Packages control相关的文件夹和文件 下载https://packagecontrol.io/Packa ...

  2. 手动编译安装tmux

    tmux的好处就不多说了,总之是多屏管理的神器.通常我们用系统通用的安装方式可以安装到tmux,但有时候,安装到的可能不是我们所需要的版本,又或者软件源里面没有带tmux.这个时候就需要手动编译安装了 ...

  3. Ajax笔记(一)

    Ajax三步骤: Asynchronous Javascript And XML 1.运用HTML和CSS实现页面,表达信息: 2.运用XMLHttpRequest和web服务器进行数据的异步交换: ...

  4. android文件缓存管理

    缓存类  : public class ConfigCache { private static final String TAG = ConfigCache.class.getName(); pub ...

  5. HDOJ 4802 GPA

    Problem Description In college, a student may take several courses. for each course i, he earns a ce ...

  6. Servlet入门第二天

    1. GenericServlet: 1). 是一个 Serlvet. 是 Servlet 接口和 ServletConfig 接口的实现类. 但是一个抽象类. 其中的 service 方法为抽象方法 ...

  7. Jquery Accordion 折叠面板

    属性 类型 默认值 active Boolean/Number/jQuery/Selector/Element 第一个面板 设定默认显示的面板.设置为 false 时默认不显示面板,需 collaps ...

  8. Dreamweaver Flash Photoshop网页设计综合应用 (智云科技) [iso] 1.86G​

    全书共15章,主要包括网页制作基础.Dreamweaver CC网页制作.Photoshop CC网页图像设计.Flash CC网页动画设计以及综合案例实战5个部分.通过本书的学习,不仅能让读者学会三 ...

  9. python语言积累

    调试打印堆栈 import traceback traceback.print_exc() #打印堆栈的详细信息

  10. 在Android中使用FlatBuffers(中篇)

    本文来自网易云社区. FlatBuffers.Protobuf及JSON对比测试 FlatBuffers相对于Protobuf的表现又如何呢?这里我们用数据说话,对比一下FlatBuffers格式.J ...