Codeforces Round #635 (Div. 2) A-D

A

输出BBC就好了

B

大于20就一直除

再判断一下 (结果-10*m)是否大于0

C

dfs预处理深度dep和子结点个数num

将dep-num从大到小排序

从中选取k个工业区

孩子的dep-num一定大于父亲  当选取父亲的时候一定是已经选取了孩子的 所以直接累加前k个dep-num值就好了

 1 #include <cstdio>
 2 #include <queue>
 3 #include <iostream>
 4 #include <vector>
 5 #include <stack>
 6 #include <algorithm>
 7 #include <cstring>
 8 #include <cmath>
 9 #include <set>
10 #include <map>
11 #include <iomanip>
12 #define mem(a,b) memset(a,b,sizeof(a))
13 #define ll long long
14 #define PI acos(-1)
15 #define pb(x)   push_back(x)
16 //#define debug;  cout << "@@@" << endl;
17 using namespace std;
18 const long long mod = 1e9+7;
19 const int maxn = 2e5 + 5;
20 typedef unsigned long long ull;
21 const int INF = 0x3f3f3f3f;
22 //const int INF = (1<<30) -2;
23 //#define INF INT_MAX
24 const int MAX = 1e4+50;
25 const double eps = 1e-6;
26 ll gcd(ll a, ll b){return b==0?a:gcd(b,a%b);}
27 int n,m,k;
28 int eid,head[maxn];
29 int val[maxn];
30 struct edge
31 {
32     int u,v,nxt;
33 }E[maxn<<1];
34 struct node
35 {
36     int w,son,val;
37     bool f;
38 }dep[maxn];
39 void add(int u, int v)
40 {
41     E[eid].u=u;
42     E[eid].v=v;
43     E[eid].nxt=head[u];
44     head[u]=eid++;
45 }
46 bool cmp(node a, node b)
47 {
48     return a.val > b.val;
49 }
50 void dfs(int u, int fa)
51 {
52     for (int i = head[u]; i != -1; i = E[i].nxt)
53     {
54         int v = E[i].v;
55         if (v == fa)
56             continue ;
57         dep[v].w=dep[u].w+1;
58             dfs(v,u);
59         dep[u].son += (dep[v].son+1);
60     }
61 }
62 ll ans = 0;
63 int main()
64 {
65     scanf("%d%d",&n,&k);
66     int u, v;
67     mem(head,-1);
68     for (int i = 1; i < n; i++)
69     {
70         dep[i].f=false;
71         scanf("%d%d",&u,&v);
72         add(u,v);
73         add(v,u);
74     }
75     dep[n].f=false;
76     dep[1].w=0;
77     dfs(1,1);
78     for (int i = 1; i <= n; i++)
79     {
80         dep[i].val=dep[i].w-dep[i].son;
81     }
82     sort(dep+1,dep+1+n,cmp);
83     for (int i = 1; i <= k; i++)
84     {
85         ans+=dep[i].val;
86     }
87     cout << ans << endl;
88     return 0;
89 }
View Code

D

 

posted @ 2020-04-16 14:05  isntMahe  阅读(47)  评论(0)    收藏  举报