题目链接:http://codeforces.com/problemset/problem/337/D

题意:就是一棵树上,有一些点被来自东方的神秘力量影响的,力量影响范围是d,为可能的力量源有几个。

思路:相当于是找到距离这m的点的距离都不小于d的点的个数。

先从任意一个点一次dfs,找到m个点中距离最远的点,标记为max1,在以max1开始,dfs一遍,从数组d1记录各个点的距离,找到距离最远的点max2,再从max2开始跑一遍dfs,用d2记录距离。遍历所有点,到max1和max2的距离都小于d的点就成立。

//以上是题解讲的,但是我不懂为什么要先从任意一个点一次dfs,找到m个点中距离最远的点,再从这个点开始DFS。

//我写了一个直接找两个最远的点,求圆交的WA了。等我搞懂了再来补充。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
const int maxn=1e5+;
const int INF=0x3f3f3f3f; int n,m,d;
int a[maxn],d1[maxn],d2[maxn];
int vit[maxn];
int head[maxn],k; struct Edge
{
int v;
int next;
} edge[maxn<<]; void init()
{
k=;
memset(head,-,sizeof(head));
memset(d1,,sizeof(d1));
memset(d2,,sizeof(d2));
} void addedge(int u,int v)
{
edge[k].v=v;
edge[k].next=head[u];
head[u]=k++; edge[k].v=u;
edge[k].next=head[v];
head[v]=k++;
} void dfs1(int u,int t)
{
for(int i=head[u]; i!=-; i=edge[i].next)
{
int v=edge[i].v;
if(vit[v]==)
{
vit[v]=;
d1[v]=t+;
dfs1(v,t+);
}
}
} void dfs2(int u,int t)
{
for(int i=head[u]; i!=-; i=edge[i].next)
{
int v=edge[i].v;
if(vit[v]==)
{
vit[v]=;
d2[v]=t+;
dfs2(v,t+);
}
}
} int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d%d",&n,&m,&d)==)
{
init();
for(int i=; i<=m; i++) scanf("%d",&a[i]);
int x,y;
for(int i=; i<n; i++)
{
scanf("%d%d",&x,&y);
addedge(x,y);
} memset(vit,,sizeof(vit));
vit[]=;
dfs2(,); int dd=-INF,max1,max2;
for(int i=; i<=m; i++)
if(d2[a[i]]>dd) dd=d2[a[i]],max1=a[i]; memset(vit,,sizeof(vit));
vit[max1]=;
dfs1(max1,); dd=-INF;
for(int i=; i<=m; i++)
if(d1[a[i]]>dd) dd=d1[a[i]],max2=a[i]; memset(d2,,sizeof(d2));
memset(vit,,sizeof(vit));
vit[max2]=;
dfs2(max2,); int ans=;
for(int i=; i<=n; i++)
if(d1[i]<=d && d2[i]<=d)
ans++;
printf("%d\n",ans);
}
return ;
}

CF 337D 求圆交的更多相关文章

  1. HDU 3467 Song of the Siren(圆交)

    Problem Description In the unimaginable popular DotA game, a hero Naga Siren, also known as Slithice ...

  2. Intersection(HDU5120 + 圆交面积)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5120 题目: 题意: 求两个圆环相交的面积. 思路: 两个大圆面积交-2×大圆与小圆面积交+两小圆面 ...

  3. hdu4063(圆与圆交+线段与圆交+最短路)

    写几何题总是提心吊胆.精度问题真心吓人. 其实思路挺简单的一道题,真是什么算法和几何double搞到一块,心里就虚虚的. 思路:求出所有圆之间的交点,然后用这些交点跑一遍最短路就可以了. Aircra ...

  4. hdu 1077 (圆交)

    Problem - 1077 我们可以知道,当这个单位圆可以覆盖到最多的点的时候,必定最少有两个点位于这个圆的圆周上,于是就有网上众多的O(N^3)的枚举两个在圆上的点的暴搜做法. 然而这题是可以用圆 ...

  5. JAVA求圆的面积

    import java.text.DecimalFormat;import java.util.Scanner; public class TheAreaOfCircle { public stati ...

  6. 计算几何(容斥原理,圆交):HDU 5120 Intersection

    Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The followin ...

  7. HDU 3264 Open-air shopping malls ——(二分+圆交)

    纯粹是为了改进牛吃草里的两圆交模板= =. 代码如下: #include <stdio.h> #include <algorithm> #include <string. ...

  8. HDU - 1255 覆盖的面积 (线段树求面积交)

    https://cn.vjudge.net/problem/HDU-1255 题意 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 分析 求面积并的题:https://www.cnbl ...

  9. 覆盖的面积 HDU - 1255(扫描线求面积交)

    题意: 就是扫描线求面积交 解析: 参考求面积并.... 就是把down的判断条件改了一下..由w > 0 改为 w > 1 同时要讨论一下 == 1 时  的情况, 所以就要用到一个临时 ...

随机推荐

  1. oracle中将自建用户下的所有表删除

    select 'drop table '||table_name||' ;' from user_tables;select 'drop sequence '||sequence_name||' ;' ...

  2. ios开发网络知识 TCP,IP,HTTP,SOCKET区别和联系

    TCP,IP,HTTP,SOCKET区别和联系 网络由下往上分为:        对应 物理层-- 数据链路层-- 网络层--                       IP协议 传输层--     ...

  3. poj 2724 Purifying Machinef

    poj 2724 Purifying Machinef 题意 每一个01串中最多含有一个'*','*'既可表示0也可表示1,给出一些等长的这样的01串,问最少能用多少个这样的串表示出这些串.如:000 ...

  4. <<< html图片背景平铺

    CSS背景图片平铺技巧 使用CSS来设置背景图片同传统的做法一样简单,但相对于传统控制方式,CSS提供了更多的可控选项,我们先来看看最基本的设置图片的方法.html代码: 代码如下: <divi ...

  5. HTML2

    1. IIS是一个软件,在"客户端服务器"模型中,它是服务器端软件,它主要提供基于HTTP的文档服务,主要是WWW     的发送,以及FTP的文件下载服务. VS提供了" ...

  6. flask-whooshalchemy需要注意的一点

    在学习mega—tutorial时全文搜索模块遇到了问题,那就是使用全文搜索查询出来的数据为空的列表,输出了sql语句后发现where后没有条件,困扰了许久,后来才发现是自己不细心,在进行全文索引时应 ...

  7. 使用ASP.NET WEB API构建基于REST风格的服务实战系列教程(一)——使用EF6构建数据库及模型

    系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 使用Entity Framework Code First模式构建数据库对象 已经决定使用EF C ...

  8. bootstrap做了一个表格

    花了一下午做了一个表格: 大致是这样: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf ...

  9. 自定义cell自适应高度

    UITableView在许多App种被大量的应用着,呈现出现的效果也是多种多样的,不能局限于系统的一种样式,所以需要自定义cell 自定义cell呈现的内容也是多种多样的,内容有多有少,所以需要一种能 ...

  10. mysql 主从master-slave同步复制 配置,为读写分离准备

    1.为方便,我在一个windows下安装两个mysql实例,端口分别是 3306.3307 打开 my.ini 或 my-default.ini 文件 配置 basedir datadir 和port ...