LA 3902 网络
2017-04-12 22:13
232 查看
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1903
题意:
n 台计算机,n-1条边成树,有一个服务器,给定一个 k ,要求所有叶子结点,距离服务器的距离 <=k; 所以要在一些地方放服务器;
问最少要放多少个服务器?
View Code
题意:
n 台计算机,n-1条边成树,有一个服务器,给定一个 k ,要求所有叶子结点,距离服务器的距离 <=k; 所以要在一些地方放服务器;
问最少要放多少个服务器?
#include <bits/stdc++.h> using namespace std; const int maxn = 1000 + 10; int n,s,k; vector<int> gr[maxn],nodes[maxn]; int fa[maxn]; void dfs(int u,int f,int d) { fa[u] = f; int nc = gr[u].size(); if(nc==1&&d>k) nodes[d].push_back(u); for(int i=0; i<nc; i++) { int v = gr[u][i]; if(v!=f) dfs(v,u,d+1); } } bool covered[maxn]; void dfs2(int u,int f,int d) { covered[u] = true; int nc = gr[u].size(); for(int i=0; i<nc; i++) { int v = gr[u][i]; if(v!=f&&d<k) dfs2(v,u,d+1); } } int solve() { int ans = 0; memset(covered,0,sizeof(covered)); for(int d=n-1; d>k; d--) { for(int i=0; i<nodes[d].size(); i++) { int u = nodes[d][i]; if(covered[u]) continue; int v = u; for(int j=0; j<k; j++) v = fa[v]; dfs2(v,-1,0); ans++; } } return ans; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&s,&k); for(int i=1; i<=n; i++) { gr[i].clear(); nodes[i].clear(); } for(int i=0; i<n-1; i++) { int a,b; scanf("%d%d",&a,&b); gr[a].push_back(b); gr[b].push_back(a); } dfs(s,-1,0); printf("%d\n",solve()); } return 0; }
View Code
相关文章推荐
- LA 3902 Network 网络
- 网络(Network,Seoul 2007,LA 3902)
- 树(网络,LA 3902)
- LA 3902 网络
- NetWork(LA 3902)深度优先搜索
- LA 3902 Network
- 3902 - Network (LA)
- LA 3902 Network
- 2007LA 3902 网络(树+贪心)
- 例题1.15 网络 UVALive 3902
- LA_3902 - Network
- LA 4731 蜂窝网络(简单dp+贪心)
- 《算法竞赛-训练指南》第一章-1.15_LA 3902
- GANs学习系列(7): 拉普拉斯金字塔生成式对抗网络Laplacian Pyramid of Adversarial Networks
- LA3902 Network
- LA 3902 UVA 1267 - Network
- 2007LA 3902 网络(树+贪心)
- LA 3902 Network
- UVALive 3902 网络
- 满足网络处理应用的LA-1接口标准概述