UVALive 3902 网络

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2515

http://7xjob4.com1.z0.glb.clouddn.com/c6a2a6f54f5a6c2cae2c82df2ec552f7

题意:给网络图,叶节点是客户端,其他是服务器,设置最少的服务数在服务器上使客户端到服务的距离不超过指定值

思路:将已有的那个服务作根,转换图至有根树,记录各叶子节点的深度;选深度最大的叶节点的 指定值距离 的父亲节点作为设置服务最划算,设置后dfs覆盖状态,只需处理深度大于指定值的叶子节点。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 const int maxn=1005;
 5 vector <int> gr[maxn],nodes[maxn];
 6 int n,s,k,fa[maxn];
 7 bool covered[maxn];
 8
 9 void dfs(int u,int f,int d)
10 {
11     int i,j;
12     fa[u]=f;
13     int nc=gr[u].size();
14     if(nc==1 && d>k)
15     {
16         nodes[d].push_back(u);
17     }
18     for(i=0;i<nc;i++)
19     {
20         int v=gr[u][i];
21         if(v!=f)
22             dfs(v,u,d+1);
23     }
24     return ;
25 }
26
27 void dfs2(int u,int f,int d)
28 {
29     int i,j;
30     covered[u]=true;
31     int nc=gr[u].size();
32     for(i=0;i<nc;i++)
33     {
34         int v=gr[u][i];
35         if(v!=f && d<k)
36             dfs2(v,u,d+1);
37     }
38     return ;
39 }
40
41 int solve()
42 {
43     int ans=0;
44     int i,j;
45     memset(covered,0,sizeof(covered));
46     for(int d=n-1;d>k;d--)
47     {
48         for(i=0;i<nodes[d].size();i++)
49         {
50             int u=nodes[d][i];
51             if(covered[u])  continue;
52
53             int v=u;
54             for(j=0;j<k;j++)
55                 v=fa[v];
56             dfs2(v,-1,0);
57             ans++;
58         }
59     }
60     return ans;
61 }
62
63
64 int main()
65 {
66     int T;
67     int i,j;
68     scanf("%d",&T);
69     while(T--)
70     {
71         scanf("%d%d%d",&n,&s,&k);
72         for(i=0;i<=n;i++)
73         {
74             gr[i].clear();
75             nodes[i].clear();
76         }
77         for(i=1;i<n;i++)
78         {
79             int u,v;
80             scanf("%d %d",&u,&v);
81             gr[u].push_back(v);
82             gr[v].push_back(u);
83         }
84         dfs(s,-1,0);
85         printf("%d\n",solve());
86     }
87     return 0;
88 }

时间: 2024-08-08 12:58:45

UVALive 3902 网络的相关文章

[2016-03-19][UVALive][3902][Network]

时间:2016-03-19 18:41:09 星期六 题目编号:[2016-03-19][UVALive][3902][Network] 题目大意:给定一个树状的图,一个服务器能覆盖k范围内的人,已知一个服务器的位置,问至少需要多少个服务器才能覆盖所有的叶子节点 分析: 以第一个服务器的点为根,把无根树转换为有根树 要使每个叶子节点都被覆盖,那么叶子节点的k级祖先内必须有一个服务器 要使服务器最少,服务器应该放在最远的位置 方法: dfs1得到每层深度的节点(k层以内的就不用记录),同时记录每个

例题1.15 网络 UVALive 3902

1.题目描述:点击打开链接 2.解题思路:本题要求放置尽可能少的服务器,使得所有的客户端到最近的服务器的距离都不超过k.由于已经放置了一个服务器,不妨把它当做根结点,先把无根树转化为有根树,然后我们考虑最深的叶子,那么不难证明,该叶子结点的最优服务器的放置位置是它的k级祖先.这样本题的算法便不难想出:从最深的叶子开始枚举,并在它的k级祖先处放置一个服务器,同时标记该服务器能覆盖到的所有结点,这样当所有的叶子都被覆盖到时,服务器数量就是最少的.只用枚举到第k+1层叶子即可停止,因为小于等于k的叶子

LA 3902 网络

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1903 题意: n 台计算机,n-1条边成树,有一个服务器,给定一个 k ,要求所有叶子结点,距离服务器的距离 <=k: 所以要在一些地方放服务器: 问最少要放多少个服务器? 图中要在 4 号结点放一个服务器,k = 2; 分析: 1.无根树要转有根树 从下往上

UVALive3902 Network[贪心 DFS&amp;&amp;BFS]

UVALive - 3902 Network Consider a tree network with n nodes where the internal nodes correspond to servers and the terminal nodes correspond to clients. The nodes are numbered from 1 to n. Among the servers, there is an original server S which provid

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

1 #include<iostream> 2 #include<cstring> 3 #include<vector> 4 using namespace std; 5 6 const int maxn=1000+10; 7 int n,s,k; 8 vector<int> tree[maxn],nodes[maxn]; 9 int fa[maxn]; 10 bool covered[maxn]; 11 12 void dfs(int u,int f,int

iOS开发——网络编程OC篇&amp;Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要

网络攻防第一次作业(201421450010)

姓名:陈书扬 学号:201421450010 指导教师:高见 1.虚拟机安装与调试 安装windows和linux(kali)两个虚拟机,均采用NAT网络模式,查看主机与两个虚拟机器的IP地址,并确保其连通性.同时为两个虚拟机做一个快照 windows虚拟机 Linux虚拟机 本地主机win10 两台主机都ping通 2.Windows基本命令 dir显示目录   cd 进入目录 Arp -a -d -s arp缓存 net share 查看计算机IPC$共享资源 netstat -ano网络链

10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包

- 10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包 - 扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.html  - tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html  # 10.6 监控io性能 ![mark](http://oqxf7c508.bkt.clouddn.com/b

Kali linux网络配置

Kali linux 安装完成后,需要对其网络进行配置.使用DHCP服务是配置网卡最简单的方法之一,但渗透测试时通常不会这样做,因为系统会被记录在DHCP服务器的数据库中. 1  动态DHCP方式 配置文件地址: /etc/network/interface # 启动系统激活设备 # Loop回环地址 auto lo iface lo inet loopback # 启动系统激活设备 # 网卡eth0设置为DHCP类型 auto eth0 iface eth0 inet dhcp 2  静态St