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 }
D

浙公网安备 33010602011771号