题目地址:HDU 3832

这个题的这种方法我无法给出证明。

我当时这个灵感出来的时候是想的是要想覆盖的点最少,那就要尽量反复利用这些点,然后要有两个之间是通过还有一个点间接连接的,这样会充分利用那些点。

然后就这样写了一次,一直WA。。然后中午睡觉的时候突然想到了有一种情况这样做是不正确的。那就是有个点作为中间点,与三个点相连的情况,这样的情况尽管也符合。可是会有反复边。。。

可是恰恰相反。。反复边应该越多越好。

那就充分利用了这些点。那么这个点应该怎么找呢?那就直接枚举好了。可是枚举每一个点都求一次最短路的话非常明显不科学。。

反正仅仅是利用到那三个点的最短距离,那就仅仅对这三个点分别求一次,那别的点到这三个点的最短路就都求出来了。

然后枚举全部点到三个点的距离之和,找出最小的。再用n减去最小值就是须要关闭的最大值了。

代码例如以下:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
int head[300], cnt, vis[300];
int d[3][301];
struct node1
{
int x, y, r;
} dian[1000000];
struct node
{
int u, v, w, next;
} edge[1000000];
void add(int u, int v, int w)
{
edge[cnt].v=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt++;
}
void spfa(int source, int x)
{
memset(d[x],INF,sizeof(d[x]));
memset(vis,0,sizeof(vis));
d[x][source]=0;
deque<int>q;
q.push_back(source);
while(!q.empty())
{
int u=q.front();
q.pop_front();
vis[u]=0;
for(int i=head[u]; i!=-1; i=edge[i].next)
{
int v=edge[i].v;
if(d[x][v]>d[x][u]+edge[i].w)
{
d[x][v]=d[x][u]+edge[i].w;
if(!vis[v])
{
vis[v]=1;
if(!q.empty()&&d[x][v]<d[x][q.front()])
{
q.push_front(v);
}
else
{
q.push_back(v);
}
}
}
}
}
}
int main()
{
int t, n, x, y, r, ans, i, j, min1;
double z;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(head,-1,sizeof(head));
cnt=0;
for(i=1; i<=n; i++)
{
scanf("%d%d%d",&dian[i].x,&dian[i].y,&dian[i].r);
}
for(i=1; i<=n; i++)
{
for(j=1; j<i; j++)
{
z=sqrt((dian[i].x-dian[j].x)*1.0*(dian[i].x-dian[j].x)+(dian[i].y-dian[j].y)*1.0*(dian[i].y-dian[j].y));
if(z<=dian[i].r+dian[j].r)
{
add(i,j,1);
add(j,i,1);
}
}
}
spfa(1,0);
spfa(2,1);
spfa(3,2);
min1=INF;
if(d[0][2]==INF||d[0][3]==INF)
{
printf("-1\n");
continue ;
}
for(i=1;i<=n;i++)
{
if(d[0][i]!=INF&&d[1][i]!=INF&&d[2][i]!=INF)
{
if(min1>d[0][i]+d[1][i]+d[2][i]+1)
{
min1=d[0][i]+d[1][i]+d[2][i]+1;
}
}
}
printf("%d\n",n-min1);
}
return 0;
}

HDU 3832 Earth Hour(最短路)的更多相关文章

  1. hdu 3832 Earth Hour (最短路变形)

    Earth Hour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Tota ...

  2. hdu 3832 Earth Hour(最短路变形)

    Earth Hour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total ...

  3. hdu 3832 Earth Hour

    http://acm.hdu.edu.cn/showproblem.php?pid=3832 #include <cstdio> #include <iostream> #in ...

  4. hdu 3832 Earth Hour bfs

    Earth Hour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Prob ...

  5. HDU 5294 Tricks Device 最短路+最大流

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5294 题意: 给你个无向图: 1.求最少删除几条边就能破坏节点1到节点n的最短路径, 2.最多能删除 ...

  6. 【HDOJ】3832 Earth Hour

    其实就是bfs,不过也可以写成最短路,因为权重为1,可以用Spira解. /* 3832 */ #include <iostream> #include <string> #i ...

  7. 2017多校第10场 HDU 6181 Two Paths 次短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6181 题意:给一个图,求出次短路. 解法:我之前的模板不能解决这种图,就是最短路和次短路相等的情况,证 ...

  8. HDU 5889 Barricade(最短路+最小割)

    http://acm.hdu.edu.cn/showproblem.php?pid=5889 题意: 给出一个图,帝国将军位于1处,敌军位于n处,敌军会选择最短路到达1点.现在帝国将军要在路径上放置障 ...

  9. hdu 5521 Meeting(最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题意:有1-n共n个点,给出m个块(完全图),并知道块内各点之间互相到达花费时间均为ti.已知两 ...

随机推荐

  1. HTML5特性检測

    HTML5特性检測:    1.检測全局对象:诸如window或navigator是否拥有特定的属性    2.创建元素:检測该元素的DOM对象是否拥有特定的属性    3.创建元素:检測该元素的DO ...

  2. 配置JVM内存 查看内存工具

    一.配置JVM内存 1.配置JVM内存的參数有四个: -XmxJavaHeap最大值.默认值为物理内存的1/4.最佳设值应该视物理内存大小及计算机内其它内存开销而定. -XmsJavaHeap初始值, ...

  3. Multitasking Apps may only use background services for their intended purposes

    2.16 Details Your app declares support for audio in the UIBackgroundModes key in your Info.plist, bu ...

  4. core graphics path

    当UIKit无法满足画图需求的时候.就须要用到Core Graphics API.当中最普遍的就是path. 一些重要的概念 graphics context 能够理解成canvas.在ios里相应C ...

  5. JavaScript三在弹出的对话框中

    据悉js小伙伴会发现,我们在某些情况下使用的alert()办法.prompt()办法.prompt()办法.它们在屏幕上的对话框.容,使用这样的方法使得页面的交互性更精彩.实际上我们常常会在进行网页浏 ...

  6. SQL Server :理解数据记录结构

    原文:SQL Server :理解数据记录结构 在SQL Server :理解数据页结构我们提到每条记录都有7 bytes的系统行开销,那这个7 bytes行开销到底是一个什么样的结构,我们一起来看下 ...

  7. 设计模式——工厂模式(Factory)

    要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1.概念 工厂模式定 ...

  8. Struts的ONGL

    1.什么是OGNL OGNL它是Object Graphic Navigation Language(对象图导航语言)缩写,    它是一个开源项目. Struts2框架使用OGNL作为默认的表达式语 ...

  9. JAVA环境配置---------jdk安装路径中存在空格的问题

    我把jdk 安装在C:\Program Files下 而ide启动脚本 startup.bat 例如以下: if "%OS%"=="Windows_NT" se ...

  10. UVA 11149 - Power of Matrix(矩阵乘法)

    UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞.∑kiAi=(1+Ak/2)∑k/2iAi,不断二分就可以 代码: ...