Codeforces Round #635 (Div. 1)A(DFS,记录子节点数量)
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 vector<int>v[200007]; 5 int vis[200007];//孩子结点数量 6 pair<int,int>val[200007]; 7 vector<int>vv; 8 void dfs(int x,int pre,int now){ 9 vis[x]=1; 10 for(auto it:v[x]){ 11 if(it==pre) 12 continue; 13 dfs(it,x,1+now); 14 vis[x]+=vis[it]; 15 } 16 vv.emplace_back(now-vis[x]+1);//当前深度减去孩子节点数量为这个结点的贡献,再加上根节点作为旅游城市(故+1) 17 } 18 int main(){ 19 ios::sync_with_stdio(false); 20 cin.tie(NULL); 21 cout.tie(NULL); 22 int n,k; 23 cin>>n>>k; 24 for(int i=1;i<n;++i){ 25 int x,y; 26 cin>>x>>y; 27 v[x].emplace_back(y); 28 v[y].emplace_back(x); 29 } 30 vis[1]=1; 31 dfs(1,0,0); 32 long long sum=0; 33 int mx=vv.size(); 34 sort(vv.begin(),vv.end(),greater<int>());//降序排序 35 for(int i=0;i<k;++i) 36 sum+=vv[i]; 37 cout<<sum; 38 return 0; 39 }
保持热爱 不懈努力
不试试看怎么知道会失败呢(划掉)
世上无难事 只要肯放弃(划掉)