uva 1267 - Network
这个题目关键在于把无根树变成有根树;这个用dfs;
然后用贪心的方法,从最深的那层开始,每次找到节点的上k层,建一个服务器,然后用一个dfs把这个服务器能够覆盖的节点标记;
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#define maxn 1005
using namespace std; vector<int>node[maxn],deep[maxn]; bool vis[maxn];
int f[maxn],n,s,k; void dfs(int x,int fa,int d)
{
f[x]=fa;
int l=node[x].size();
if(l==1&&d>k)deep[d].push_back(x);
for(int i=0;i<l;i++)
{
int v=node[x][i];
if(v!=fa)dfs(v,x,d+1);
}
} void dfs2(int x,int fa,int d)
{
vis[x]=1;
int l=node[x].size();
for(int i=0;i<l;i++)
{
int v=node[x][i];
if(v!=fa&&d<k)dfs2(v,x,d+1);
}
} int solve()
{
int ans=0;
memset(vis,0,sizeof vis);
for(int d=n-1;d>k;d--)
{
int l=deep[d].size();
for(int j=0;j<l;j++)
{
int v=deep[d][j];
if(!vis[v])
{
for(int i=0;i<k;i++)v=f[v];
dfs2(v,-1,0);
ans++;
}
}
}
return ans;
} int main()
{
int t,x,y;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&s,&k);
for(int i=1;i<=n;i++)
{
node[i].clear();
deep[i].clear();
}
for(int i=0;i<n-1;i++)
{
scanf("%d%d",&x,&y);
node[x].push_back(y);
node[y].push_back(x);
}
dfs(s,-1,0);
printf("%d\n",solve());
}
return 0;
}
uva 1267 - Network的更多相关文章
- UVA 1267 Network(DFS)
题目链接:https://vjudge.net/problem/UVA-1267 首先我们要把这样一棵无根树转换成有根树,那么树根我们可以直接使用$VOD$. 还有一个性质:如果深度为$d$的一个节点 ...
- uva 315 Network(无向图求割点)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Uva 315 Network 判断割点
模板题,注意输出 #include <stdio.h> #include <string.h> #include <algorithm> #include < ...
- 无向图求割点 UVA 315 Network
输入数据处理正确其余的就是套强联通的模板了 #include <iostream> #include <cstdlib> #include <cstdio> #in ...
- hrbustoj 1494(原题UVA 315 Network) 解题报告 tarjan求割点
主要思路:使用tarjan选取一个根节点建立一个棵搜索树,判断一个点是割点的充分必要条件是,对于一个节点u如果他的孩子节点v的low值大于等于u的出生日期dfn值,进行下一步判断,如果u是我们选的根节 ...
- UVa 793 - Network Connections
题目大意:给出计算机之间的连接配置,询问某两台计算机是否相连.判断两个点是否在同一个连通分量里,用并查集处理. #include <cstdio> #define MAXN 1000000 ...
- UVA 315 Network (模板题)(无向图求割点)
<题目链接> 题目大意: 给出一个无向图,求出其中的割点数量. 解题分析: 无向图求割点模板题. 一个顶点u是割点,当且仅当满足 (1) u为树根,且u有多于一个子树. (2) u不为树根 ...
- Uva 网络(Network,Seoul 2007,LA 3902)
#include<iostream> #include<cstring> #include<vector> using namespace std; +; int ...
- Uva 3902 Network
题目大意: 在非叶子节点上安装最少的服务器使得,每个叶子节点到服务器的距离不超过k. 贪心+图上的dfs. 先从深度最大的叶子节点开始找.找到父节点后再用这个父节点进行扩充. /* ********* ...
随机推荐
- Memcached启动、关闭参数(摘录)
启动参数注释如下: -p <num> 指定服务TCP端口,默认为11211 -U <num> 指定服务UDP端口 默认11211表示打开,设置0表示关闭 -s < ...
- Java基础知识强化之IO流笔记49:IO流练习之 复制指定目录下指定后缀名的文件并修改名称的案例
1. 复制指定目录下指定后缀名的文件并修改名称的案例 需求:复制指定目录下的指定文件,并修改后缀名. • 指定的文件是:.java文件. • 指定的后缀名是:.jad • 指 ...
- 获取本地IP和端口号的指令
ipconfig就可以获取ip 获取端口号的指令: 开始--运行--cmd--输入netstat an(中间有一空格)
- 闲话shuffle(洗牌)算法
工作中经常会用到洗牌算法,看到这篇文章不错,原文摘自:http://www.atatech.org/article/detail/11821/928 作者:子仲 场景 洗牌算法的应用场景其实很多 ...
- Ubuntu14.04服务器安装ftp
随笔记录一下Ubuntu下安装ftp 1.远程连接登录服务器之后,输入sudo apt-get update 并回车.如果不运行该命令,直接安装vsftpd,可能会出现有一些软件包无法下载. 2.输入 ...
- select unit_timestamp(); 和select unit_timestamp("1970-1-1 08:00:00")和 select from_unixtime(1)
偶然看到MySQL的一个函数 unix_timestamp(),不明就里,于是就试验了一番. unix_timestamp()函数的作用是返回一个确切的时间点的UNIX时间戳,这个Unix时间戳是一个 ...
- 使用普通Windows服务创建Quartz.Net服务项目
Quartz.NET 项目地址 http://quartznet.sourceforge.net/ 源码下载地址:Quartz.Net.2.0 首先创建Quartz.Net.2.0解决方案,添加 Wi ...
- 解决VirtualBox错误:“FATAL:No bootable medium found!”
VirtualBox错误:“FATAL:No bootable medium found!” 用VirtualBox安装系统出现这个错误的几率极高,因为当哥出现同样问题的时候股沟了下”FATAL:No ...
- 类库探源——System.Math 和 Random
一.System.Math Math类:为三角函数.对数函数和其他通用数学函数提供常数和静态方法 命名空间: System 程序集 : mscorlib.dll 继承关系: 常用属性: Math. ...
- Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Hanks 博 ...