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 d)
13 {
14     fa[u]=f;
15     int nc=tree[u].size();
16     if(nc==1&&d>k) nodes[d].push_back(u);
17     for(int i=0;i<nc;i++)
18         if(tree[u][i]!=f) dfs(tree[u][i],u,d+1);
19 }
20
21 void dfs2(int u,int f,int d)
22 {
23     int nc=tree[u].size();
24     covered[u]=true;
25     for(int i=0;i<nc;i++)
26         if(tree[u][i]!=f&&d<k)
27             dfs2(tree[u][i],u,d+1);
28 }
29
30 int solve()
31 {
32     int ans=0;
33     memset(covered,0,sizeof(covered));
34     for(int d=n-1;d>k;d--)
35         for(int i=0;i<nodes[d].size();i++)
36         {
37             int u=nodes[d][i];
38             if(covered[u]) continue;
39             int v=u;
40             for(int j=0;j<k;j++) v=fa[v];
41             dfs2(v,-1,0);
42             ans++;
43         }
44     return ans;
45 }
46
47 int main()
48 {
49     int T;
50     cin>>T;
51     while(T--)
52     {
53         cin>>n>>s>>k;
54         for(int i=1;i<=n;i++)
55         {
56             tree[i].clear();
57             nodes[i].clear();
58         }
59         for(int i=1;i<=n-1;i++)
60         {
61             int a,b;
62             cin>>a>>b;
63             tree[a].push_back(b);
64             tree[b].push_back(a);
65         }
66         dfs(s,-1,0);
67         cout<<solve()<<endl;
68     }
69     return 0;
70 }
时间: 2024-10-19 01:29:00

Uva 网络(Network,Seoul 2007,LA 3902)的相关文章

uva 1267 Network(DFS)

uva 1267 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 provides VO

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.无根树要转有根树 从下往上

分子量(Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ char s[20]; scanf("%s", s); double sum = 0; for (int i = 0; i < strlen(s); i++) { if (s[i] == 'C') sum += (s[i + 1] - 48) * 12.01; if (s[i] == 'H') { if (s[i +

分子量 (Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)

解题思路: 1.将分子量用double 数组记录下来 2.将字符串存储在字符数组中,从头向后扫描,一直记住“字母”,对下一个字符进行判断,是否是数字,如果是数字:用一个整数记录,本代码中用的sum,同时下标++. 进行判断,查看是否对数字进行了记录,即查看sum是否进入了while循环并被赋值,如果没有被赋值,说明下一个字符不是数字,直接对W(总记录)值进行赋值,为当前字符的权值(分子量),即double数组的中的值.如果被赋值,说明字符后面是一个数字,sum中存放了该“数字”,也是对w赋值,不

LA 3902 Network

贪心的思想吧,对于每一个还没被覆盖到的叶子节点,最优的选择就是他的k级祖先(节点的父亲为1级祖先). 记录下各深度的叶子节点,这对于这些节点选择一个最优的祖先节点,然后从选出的这个祖先节点向外扩展,把该点能覆盖到的叶子节点全都标记.按深度从深到浅使每个叶子节点都被覆盖后,既是ans #include <map> #include <cmath> #include <cstdio> #include <vector> #include <string&g

UVA 11636 Hello World,LA 3602 DNA Consensus String,UVA 10970 Big Chocolate,UVA 10340 All in All,UVA 11039 Building Designing

课程好紧啊,只能刷点水题了,几乎都是贪心. UVA 11636 Hello World 二的幂答案就是二进制长度减1,不是二的幂答案就是是二进制长度. #include<cstdio> int main() { int n,kas = 0; while(scanf("%d",&n),n>0){ int r = 0; for(n--;n;n>>=1) r++; printf("Case %d: %d\n",++kas,r); }

uva 315 Network(连通图求割点)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=251  Network  A Telephone Line Company (TLC) is establishing a new telephone cable network. They are connecting several places numbered by integers

UVA 11100 The Trip, 2007 水题一枚

题目链接:UVA - 11100 题意描述:n个旅行箱,形状相同,尺寸不同,尺寸小的可以放在尺寸大的旅行箱里.现在要求露在最外面的旅行箱的数量最少的同时满足一个旅行箱里放的旅行箱的数量最少.求出这样满足要求的任意一种方案. 算法分析:首先我们可以确定最少的旅行箱的数量cnt:即n个旅行箱里按照尺寸大小分类(尺寸相同的在同一类),数量最多的那一类的数量.然后把cnt看成有cnt个堆,第二个要求就是要让这cnt个堆里最大旅行箱数量最小,直接用vector处理即可. 等AC之后突然想到,三个旅行箱尺寸

UVA - 315 Network 和 UVA - 10199 (求割顶)

链接 :  http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20837 http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21278 求割顶的裸题. UVA - 315 #include <algorithm> #include <iostream> #include <sstream> #include <cstrin