比赛 20161115 评测结果 AWWWAAWWWWWWWWWWWWWW
题目名称 树和机器人 最终得分 15
用户昵称 coolkid 运行时间 0.128 s
代码语言 C++ 内存使用 5.65 MiB
提交时间 2016-11-15 11:56:09
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. const int MAXN=1e5+10;
  8. const int MAXM=MAXN<<1;
  9.  
  10. struct Edge{
  11. int from,to,dist,nxt;
  12. }edges[MAXM];
  13. int head[MAXN],cnt=0;
  14.  
  15. void addedge(int f,int t,int d){
  16. edges[cnt].from=f;edges[cnt].to=t;edges[cnt].dist=d;
  17. edges[cnt].nxt=head[f];
  18. head[f]=cnt++;
  19. }
  20.  
  21. int n,r,k;
  22. int dist[MAXM];
  23. int son[MAXN];
  24. long long ans=0;
  25.  
  26. void init(){
  27. memset(head,-1,sizeof(head));
  28. scanf("%d%d%d",&n,&r,&k);
  29. for(int i=1;i<n;i++){
  30. int x,y,z;
  31. scanf("%d%d%d",&x,&y,&z);
  32. addedge(x,y,z);
  33. addedge(y,x,z);
  34. ans+=z;
  35. }
  36. cout<<ans<<endl;
  37. exit(0);
  38. memset(son,0,sizeof(son));
  39. }
  40.  
  41. int deep[MAXN];
  42. int fa[MAXN];
  43. int dp=0;
  44.  
  45. void dfs(int u){
  46. for(int i=head[u];~i;i=edges[i].nxt){
  47. int v=edges[i].to;
  48. if(fa[u]==v) continue;
  49. fa[v]=u;
  50. deep[v]=deep[u]+1;
  51. dp=max(dp,deep[v]);
  52. dfs(v);
  53. }
  54. }
  55.  
  56. int sz=0;
  57.  
  58. void work(){
  59. dfs(r);
  60. long long ans1=0;
  61. for(int i=1;i<=n;i++) if(deep[i]==dp){
  62. for(int j=head[i];~j;j=edges[j].nxt) dist[sz++]=edges[j].dist;
  63. }
  64. sort(dist,dist+sz);
  65. ans1=ans;
  66. if(k==1) ans1=ans*2-dist[sz-1];
  67. cout<<ans1<<endl;
  68. }
  69. int main(){
  70. freopen("trobot.in","r",stdin);
  71. freopen("trobot.out","w",stdout);
  72. init();
  73. work();
  74. return 0;
  75. }