记录编号 125254 评测结果 AAAAAAAA
题目名称 保卫钓鱼岛! 最终得分 100
用户昵称 Gravatar乌龙猹 是否通过 通过
代码语言 C++ 运行时间 0.237 s
提交时间 2014-10-08 07:25:55 内存使用 0.52 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #define maxn 10001
  3. using namespace std;
  4. int n,m;
  5. int Ans;
  6. long long tsum;
  7. bool flag=0;
  8. struct Time
  9. {
  10. int L,R,rd;
  11. };
  12. Time t[maxn];
  13. struct Tree
  14. {
  15. int ls,rs,rd;
  16. };
  17. Tree a[maxn];
  18. void dfs(int,int);
  19. int main()
  20. {
  21. freopen("diaoyu.in","r",stdin);
  22. freopen("diaoyu.out","w",stdout);
  23. scanf("%d%d",&n,&m);
  24. for(int i=1;i<n;i++)
  25. {
  26. int x,y,z;
  27. scanf("%d%d%d",&x,&y,&z);
  28. if(!a[x].ls)
  29. {
  30. a[x].ls=y;
  31. t[x].L=z;
  32. continue;
  33. }
  34. if(!a[x].rs)
  35. {
  36. a[x].rs=y;
  37. t[x].R=z;
  38. continue;
  39. }
  40. a[x].rd=y;
  41. t[x].rd=z;
  42. }
  43. for(int i=1;i<=m;i++)
  44. {
  45. flag=0;
  46. int x,y;
  47. scanf("%d%d",&x,&y);
  48. if(x==y) continue;
  49. dfs(x,y);
  50. }
  51. printf("%d\n%lld",Ans,tsum);
  52. return 0;
  53. }
  54. void dfs(int k,int en)
  55. {
  56. if(k==en)
  57. {
  58. Ans++;
  59. flag=1;
  60. return;
  61. }
  62. if(a[k].ls)
  63. {
  64. tsum+=t[k].L;
  65. dfs(a[k].ls,en);
  66. if(!flag) tsum-=t[k].L;
  67. else return;
  68. }
  69. if(a[k].rs)
  70. {
  71. tsum+=t[k].R;
  72. dfs(a[k].rs,en);
  73. if(!flag) tsum-=t[k].R;
  74. else return;
  75. }
  76. if(a[k].rd)
  77. {
  78. tsum+=t[k].rd;
  79. dfs(a[k].rd,en);
  80. if(!flag) tsum-=t[k].rd;
  81. else return;
  82. }
  83. }