uva1267 Network
https://vjudge.net/problem/UVA-1267
题意:
有一棵树,上面有一个放着水源的点s,给出一个数k,这个水源可以覆盖路径长度到s不超过k的叶子节点。现在需要把所有的叶子节点都用水源覆盖,问至少需要再放置多少个水源。
思路:
首先,这种树的问题并且明显提供了一个特殊点的题,我们可以把无根树转化为有根树简化需要解决的问题。
这题,经过转化之后,所有的深度小于等于k的节点,我们都不考虑了,只考虑深度大于k的叶子节点。
在无根树转化为有根树的过程中,把所有的深度大于k的叶子节点用一个深度对应的数组存起来。
之后,我们从最深的深度开始枚举,这个深度的如果有叶子节点并且没有被覆盖的话,那么我们就找到这个节点的第k级父亲(直接父亲是第一级),从这个祖先节点开始一次dfs,标记深度不超过k的所有节点。
解释:
从最深的深度开始枚举,并且找到它的第k级父亲这个操作,可以保证我们加的水源是最少的,假设k为4,如果用它的第3级父亲开始dfs,那么如果第4级父亲还有其它叶子节点,就没有被覆盖,但是我们在第四级父亲,既可以把这个深度的所有节点都覆盖,并且可以把第四级父亲之下的所有的叶子节点都覆盖,那么说明父亲的级别越高,那么可能覆盖的点就会越多,那么当前的点的第k级父亲就是可以覆盖到这个点的级别最高的父亲。
注意:
在dfs中,建图是建的双向图,所以一定要判断下一个dfs的点是不是与父亲节点相等。Debug了很久。。。
代码:
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std; vector<int> g[],node[];
int n,s,k;
bool cover[];
int fa[]; void dfs(int pre,int cur,int dep)
{
//printf("*\n"); fa[cur] = pre; if (g[cur].size() == && dep > k) node[dep].push_back(cur); for (int i = ;i < g[cur].size();i++)
{
int to = g[cur][i]; if (to != pre) dfs(cur,to,dep + );
}
} void dfs2(int v,int d)
{
//printf("**\n"); cover[v] = ; for (int i = ;i < g[v].size();i++)
{
int to = g[v][i]; if (to != v && d < k) dfs2(to,d+);
}
} int solve(void)
{
memset(cover,,sizeof(cover)); int ans = ; for (int d = n - ;d > k;d--)
{
for (int i = ;i < node[d].size();i++)
{
int x = node[d][i]; //printf("%d ** \n",x); if (cover[x]) continue; //printf("0000\n"); for (int j = ;j < k;j++) x = fa[x]; dfs2(x,); ans++;
}
} return ans;
} int main()
{
int t; scanf("%d",&t); while (t--)
{
scanf("%d",&n); scanf("%d%d",&s,&k); for (int i = ;i <= n;i++)
{
node[i].clear();
g[i].clear();
} for (int i = ;i < n - ;i++)
{
int x,y; scanf("%d%d",&x,&y); g[x].push_back(y);
g[y].push_back(x);
} dfs(-,s,); printf("%d\n",solve());
} return ;
}
uva1267 Network的更多相关文章
- 【树形贪心】【UVA1267】Network
重要意义:复习好久没写的邻接表了. Network, Seoul 2007, LA3902 Consider a tree network with n nodes where the interna ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- 创建 OVS flat network - 每天5分钟玩转 OpenStack(134)
上一节完成了 flat 的配置工作,今天创建 OVS flat network.Admin -> Networks,点击 "Create Network" 按钮. 显示创建页 ...
- 在 ML2 中配置 OVS flat network - 每天5分钟玩转 OpenStack(133)
前面讨论了 OVS local network,今天开始学习 flat network. flat network 是不带 tag 的网络,宿主机的物理网卡通过网桥与 flat network 连接, ...
- OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)
前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性. launch 新的 instance "cirros-vm3",网络选择 second_lo ...
- 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)
上一节部署了 cirros-vm1 到 first_local_net,今天我们将再部署 cirros-vm2 到同一网络,并创建 second_local_net. 连接第二个 instance 到 ...
- 创建 OVS Local Network - 每天5分钟玩转 OpenStack(129)
上一节我们完成了 OVS 的准备工作,本节从最基础的 local network 开始学习.local network 不会与宿主机的任何物理网卡连接,流量只被限制在宿主机内,同时也不关联任何的 VL ...
- Configure a bridged network interface for KVM using RHEL 5.4 or later?
environment Red Hat Enterprise Linux 5.4 or later Red Hat Enterprise Linux 6.0 or later KVM virtual ...
- BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3522 Solved: 1041[Submi ...
随机推荐
- Servlet的执行流程、生命周期
下面这幅图的Request和Response的箭头方向反了,应该是客户端发出请求,然后web服务器返回响应. servlet生命周期阶段包括初始化.加载.实例化.服务和销毁. 编写Servlet的d ...
- 数据结构学习(shell排序和归并排序)
# coding=utf-8 # shell排序 # 参数alist:被被排序的列表 def shellsort(alist): gap = len(alist) / 2 while gap > ...
- 消息摘要技术(MD5)
1.使用消息摘要技术对密码加密 数据库存储的是经过消息摘要技术加密之后的信息, 避免保存密码明文,提升了系统安全性 必要性说明: 如果存储明文密码,数据库系统管理员和攻破系统的黑客是可以拿到你的所有信 ...
- chrome保持元素hover,active状态
审查元素,选中需要hover的标签 点击"Styles"菜单中的":hov",弹出 Force element state 选中相应的 :hover :acti ...
- C#构建DataTable(转)
Asp.net DataTable添加列和行的方法 方法一: DataTable tblDatas = new DataTable("Datas"); DataColumn dc ...
- springboot 入门一 hello world!
微服务框架springboot,目的是用来简化新Spring应用的初始搭建以及开发过程.简化的代价,就是约定俗成很多规则,比如默认读取的配置文件名是application.properties 必需在 ...
- 转:【Java并发编程】之八:多线程环境中安全使用集合API(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17200509 在集合API中,最初设计的Vector和Hashtable是多线程安 ...
- 转:jquery 父、子页面之间页面元素的获取,方法的调用
一.jQuery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...
- 我来给.Net设计一款HttpClient
1前言 时间飞快,转眼半年,碌碌无为,眼下就要三十而立,回想三年前的今天,我将NetworkSocket库开放到github,一直在更新与学习,不求有这个库能有多好,只求自己在过程能成长,将领悟到一些 ...
- 英语学习案例分析APP 201421123108 王坤彬
第一部分.调研,测评 1.第一次使用经验. 我使用的时候苹果手机下载的必应软件.第一次使用感觉还好,但是知名度比较低,比不上喜马拉雅听书软件,这里我就做两者的对比.首先界面以及种类明显逼格更差点.必应 ...