人生第一道图论题啊,有木有

题意:

有一个树状网络,有一个原始服务器s,它的服务范围是k

问至少再放多少台服务范围是k的服务器才能使网络中的每个节点都被覆盖掉

解法:

我们以原始服务器为根将其转化成一个有根树,则深度不超过k的节点都已经被原始服务器覆盖。

我们选择深度最大的节点u然后将它的k级祖先设为服务器,进行一次DFS,将所有距离它不超过k的节点覆盖。

表示:

图的表示在这里面是用邻接表来表示的,如果a、b两个节点相邻,则gr[a]中放入b,gr[b]中放入a

怎样才算转化为有根树了?那就是把每个节点的爸爸(father)算出来,记录在fa数组中

试想,如果深度大于k的节点都已被覆盖,那么其他非叶子节点也一顶被覆盖了

所以将深度大于k的节点放在nodes表中

 //#define LOCAL
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std; const int maxn = + ;
vector<int> gr[maxn], nodes[maxn];
int n, s, k, fa[maxn];
bool coverd[maxn]; void DFS(int u, int f, int d)
{//计算各个节点的祖先,放在fa数组中
fa[u] = f;
int nc = gr[u].size();
if(nc == && d > k)
nodes[d].push_back(u);
for(int i = ; i < nc; ++i)
{
int v = gr[u][i];
if(v != f)
DFS(v, u, d + );
}
} void DFS2(int u, int f, int d)
{
coverd[u] = true;
int nc = gr[u].size();
for(int i = ; i < nc; ++i)
{
int v = gr[u][i];
if(v != f && d < k)
DFS2(v, u, d + );
}
} int solve(void)
{
int ans = ;
memset(coverd, false, sizeof(coverd));
for(int d = n - ; d > k; --d)
for(int i = ; i < nodes[d].size(); ++i)
{
int u = nodes[d][i];
if(coverd[u]) continue; int v = u;
for(int i = ; i < k; ++i) //v是u的k级祖先
v = fa[v];
DFS2(v, -, );
++ans;
}
return ans;
} int main(void)
{
#ifdef LOCAL
freopen("3902in.txt", "r", stdin);
#endif int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d", &n, &s, &k);
for(int i = ; i <= n; ++i)
{
gr[i].clear();
nodes[i].clear();
}
for(int i = ; i < n - ; ++i)
{
int a, b;
scanf("%d%d", &a, &b);
gr[a].push_back(b);
gr[b].push_back(a);
}
DFS(s, -, );
printf("%d\n", solve());
}
return ;
}

代码君

LA 3902 Network的更多相关文章

  1. LA 3902 Network(树上最优化 贪心)

    Network Consider a tree network with n <tex2html_verbatim_mark>nodes where the internal nodes ...

  2. Uva LA 3902 - Network 树形DP 难度: 0

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  3. Uva 网络(Network,Seoul 2007,LA 3902)

    #include<iostream> #include<cstring> #include<vector> using namespace std; +; int ...

  4. UVALive 3902 Network (树+dfs)

    Consider a tree network with n nodes where the internal nodes correspond to servers and the terminal ...

  5. [UVALive 3902] Network

    图片加载可能有点慢,请跳过题面先看题解,谢谢 一道简单的贪心题,而且根节点已经给你了(\(S\)),这就很好做了. 显然,深度小于等于 \(k\) 的都不用管了(\(S\) 深度为0),那么我们只需要 ...

  6. LA 3902 网络

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  7. UVaLive 3902 Network (无根树转有根树,贪心)

    题意:一个树形网络,叶子是客户端,其他的是服务器.现在只有一台服务器提供服务,使得不超k的客户端流畅,但是其他的就不行了, 现在要在其他结点上安装服务器,使得所有的客户端都能流畅,问最少要几台. 析: ...

  8. Uva 3902 Network

    题目大意: 在非叶子节点上安装最少的服务器使得,每个叶子节点到服务器的距离不超过k. 贪心+图上的dfs. 先从深度最大的叶子节点开始找.找到父节点后再用这个父节点进行扩充. /* ********* ...

  9. UVALive3902 Network[贪心 DFS&&BFS]

    UVALive - 3902 Network Consider a tree network with n nodes where the internal nodes correspond to s ...

随机推荐

  1. cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )

    Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...

  2. Sqli-labs less 62

    此处union和报错注入都已经失效了,那我们就要使用延时注入了,此处给出一个示例 payload: http://127.0.0.1/sqli-labs/Less-62/?id=1%27)and%20 ...

  3. MYSQL注入天书之后记

    后记 对于工具的看法: 我之所以在每个例子中只写了几个示例,是因为我希望你能通过这一两个示例举一反三将其他的列出来.如果让我来完成每一次完整的注入,应该在知道原理的情况下,必然使用工具或者自己写代码实 ...

  4. C#保留小数位数

    1.System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo(); prov ...

  5. vim使用详解

    1 插入类命令 i               // 在当前字符前插入 I               // 在当前行首插入 a               // 在当前字符后写入 A         ...

  6. Spring MVC 教程,快速入门,深入分析(转)

    原文地址:http://elf8848.iteye.com/blog/875830/

  7. converntion

    One convention that we have is to use the names of fruits and vegetables for variables(only in small ...

  8. haproxy.cfg

    # this config needs haproxy-1.1.28 or haproxy-1.2.1 global log 127.0.0.1 local0 log 127.0.0.1 local1 ...

  9. wordpress自定义栏目

    开启自定义栏目:点击头顶的“显示选项”,勾选“自定义栏目” 然后编辑文章时,即可看见 实验: 定义名称为:play_url ,值为:http://www.xiami.com/widget/635357 ...

  10. #-webkit-autofill##google#启用表单自动填充时,如何覆盖黄色背景

    google和opera浏览器的表单自动填充后,输入框均会变成黄色背景,黑色字体.如下图. 这样的话会与网页的整体设计风格不一致,怎样自定义样式,来覆盖黄色背景. 首先来看看是什么导致的,右键查看元素 ...