uva1267(无根树 +dfs)
来源:互联网 发布:滁州学院网络教学平台 编辑:程序博客网 时间:2024/06/06 04:46
题意:
在一张图中,有n个点,要建几个服务站,服务站可以服务离他距离为k的点;一开始只有一个服务站;
现在给出有几组样例,每组样例给出有n个点,最开始的服务站位置start,还有服务站的服务距离dis:
思路:
首先我们要以最开始的服务站为根,先建一棵树.那么深度为dis的结点就全都可以访问到了;
那么哪些结点最有可能访问不到?就是深度最深的;
所以我们建好树后,把节点按照从大到小排序,然后访问,如果这个节点没被服务到,就从这个节点往上找dis的距离,把那个点建服务站'
AC:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 1005;int u[N * 2],v[N * 2],nex[N * 2],first[N * 2],e;int n,start,dis,ans,vis[N];int num,fa[N];struct treenode {int id;int deep;}node[N];int cmp(treenode a , treenode b) {return a.deep > b.deep;}void add(int l , int r) {u[e] = l;v[e] = r;nex[e] = first[u[e]];first[u[e]] = e;e++;u[e] = r;v[e] = l;nex[e] = first[u[e]];first[u[e]] = e;e++;}void buildtree(int cur , int deep,int p) {node[num].id = cur;node[num++].deep = deep;fa[cur] = p;for(int i = first[cur] ; i != -1 ; i = nex[i]) {int x = v[i];if(x != p)buildtree(x , deep + 1, cur);}}void cover (int cur , int p , int deep) {if(deep > dis)return;vis[cur] = 1;for(int i = first[cur] ; i != -1 ;i =nex[i]) {int x = v[i];if(x != p) {cover(x , cur , deep + 1);}}}void solve() {for(int i = 0 ; node[i].deep > dis ; i++) {//for(int j = first[node[i].id] ; j != -1 ; j = nex[j]) {int x = node[i].id;if(nex[first[x]] != -1)continue;if(!vis[x]) {int pos = x;for(int k = 0 ; k < dis ;k++) {pos = fa[pos];}cover(pos , -1 , 0);ans++;}//}}}int main() {int t;scanf("%d",&t);while(t--) {e = 0;ans = 0;num = 0;memset(first , -1 , sizeof(first));memset(nex , -1 ,sizeof(nex));scanf("%d%d%d",&n,&start,&dis);int a,b;for(int i = 0 ; i < n - 1 ; i++) {scanf("%d%d",&a,&b);add(a,b);}buildtree(start , 0 , -1);sort(node , node + num , cmp);memset(vis , 0 ,sizeof(vis));solve();printf("%d\n",ans);}}
0 0
- uva1267(无根树 +dfs)
- uva1267 - Network 无根树转化有根树 树形DFS
- UVA1267 - Network
- UVA1267 - Network
- uva1267 - Network
- uva1267 Network
- 【UVA1267】Network
- 【树形贪心】【UVA1267】Network
- DFS
- DFS
- dfs
- dfs
- dfs
- dfs
- DFS
- DFS
- dfs
- DFS
- FullCalendar日历插件中文说明文档
- 没钱就该认命?
- 史上最详细freemarker语法介绍及其入门教程实例
- 总结:GIS数据的查找,插入,删除,更新
- online_judge_1166
- uva1267(无根树 +dfs)
- 算法导论笔记1——插入排序
- 图的遍历(二)—广度优先遍历
- Leetcode: Largest Number
- error C3861: “strcat_s”: 即使使用参数相关的查找,也未找到标识符
- 20150129Review
- Moto回归中国市场 工业设计是核心优势
- hive的简单介绍和基本命令整理
- jQuery Easing 动画效果扩展