UVA 1267 Network
来源:互联网 发布:matlab 矩阵svd分解 编辑:程序博客网 时间:2024/05/29 18:31
题目链接
题目大概是说N台机器连接成一个树形网络,没个服务器的覆盖范围是K,求最少需要的服务器数量。
分析:将VOD做为根节点,建立一棵树。从深度最大的节点u开始考虑,设它的第k祖先是P,Q是第1,2,3......K-1祖先中的任意一个,可以证明:对于节点u来说,选Q作为覆盖它的服务器不会比选P更好,这是因为Q能覆盖到的全部节点P也一定能够覆盖到。接下来发已经覆盖的节点删除,重复相同的操作即可。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;#define INIT(f) memset(f,0,(N+1)*sizeof(int))typedef pair<int ,int >PII;const int maxn=1010,maxe=maxn*2;int head[maxn],next[maxe],to[maxe],e;int N,S,K,fa[maxn],covered[maxn],PN;PII nodes[maxn];void Init(){ INIT(fa),INIT(covered),INIT(head) , INIT(nodes); e=1, PN=0;}void add_edge(int u,int v){ next[e] = head[u] , to[e] = v, head[u] = e++;}void DFS(int u,int f,int d){ fa[u] = f; int p=head[u]; if(next[p]==0 && d>K) nodes[PN++] = (PII){d,u}; for(; p ; p=next[p]){ int v=to[p]; if(v != f) DFS(v,u,d+1); }}void DFS2(int u,int f,int d){ covered[u] = 1; for(int p=head[u] ; p ;p=next[p]){ if(to[p]!=f && d<K) DFS2(to[p] , f ,d+1); }}int solve(){ sort(nodes,nodes+PN); int ans=0,i=PN-1, u ; for(; i>=0 ; i--){ u = nodes[i].second; if(covered[u]) continue; for(int j=0;j<K;j++) u=fa[u]; DFS2(u , 0 ,0); ans++; } return ans;}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d%d",&N,&S,&K); Init(); int u,v; for(int i=1;i<N;i++) { scanf("%d%d",&u,&v); add_edge(u,v) , add_edge(v,u); } DFS(S,0,0); printf("%d\n",solve()); } return 0;}
- uva 1267 Network
- uva 1267 Network
- UVA 1267 Network
- UVA - 1267 Network
- uva 1267 - Network(dfs)
- UVa:1267 Network
- UVA 1267 - Network
- uva 1267 - Network(dfs)
- UVA 1267 Network(dfs)
- LA 3902 UVA 1267 - Network
- UVa 1267 Network (DFS&贪心)
- uva 1267 Network(DFS)
- Network UVA
- UVA 1267 - Network(贪心DFS)
- UVA 10369 Arctic Network
- UVA 10369 - Arctic Network
- UVa 793 - Network Connections
- UVa 10369 - Arctic Network
- Mongodb亿级数据量的性能测试
- 教你如何升级app适配iOS 7
- 位运算能做什么
- VMware ESXi 虚拟硬盘的格式介绍
- C# Winform 发送邮件
- UVA 1267 Network
- iOS 面试题
- DRM引起的问题解决一例(关闭DRM)
- [UIApplication sharedApplication].keyWindow
- WebKit 分析–for android
- This virtual machine appears to be in use ERROR in vmware
- 别闹了,费曼先生
- myeclipse 10激活,本人已测试过可行
- Tiny 6410 Led 驱动模块加载(五)