记录编号 98895 评测结果 AAWWWTTT
题目名称 大话西游 最终得分 25
用户昵称 Gravatar超级傲娇的AC酱 是否通过 未通过
代码语言 C++ 运行时间 3.349 s
提交时间 2014-04-25 14:07:02 内存使用 1.07 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. #include<algorithm>
  5. #include<cstdlib>
  6. #include<cstring>
  7. #include<cmath>
  8. using namespace std;
  9. struct Ans{long long Max,Min;};
  10. struct Node{long long val;vector<Node*>End;};
  11. struct Edge{Node *st,*en;};
  12. Node* V[100001];Edge* E[100001];long long N,Q;
  13. void Build();
  14. long long Query(long long);
  15. void Change(long long,long long);
  16. Ans dfs(Node *,Node *);
  17. int main()
  18. {
  19. freopen("westward.in","r",stdin);
  20. freopen("westward.out","w",stdout);
  21. ios::sync_with_stdio(false);
  22. string s;long long e,pos,num,i;
  23. Build();
  24. for(i=0;i<Q;i++){
  25. cin>>s;
  26. if(s[0]=='Q'){
  27. cin>>e;
  28. cout<<Query(e)<<endl;
  29. }
  30. if(s[0]=='C'){
  31. cin>>pos>>num;
  32. Change(pos,num);
  33. }
  34. }
  35. return 0;
  36. }
  37. void Build()
  38. {
  39. long long i,x,u,v;
  40. cin>>N>>Q;
  41. for(i=1;i<=N;i++)
  42. {
  43. V[i]=new Node;
  44. cin>>V[i]->val;
  45. }
  46. for(i=1;i<=N-1;i++)
  47. {
  48. E[i]=new Edge;
  49. cin>>u>>v;
  50. V[u]->End.push_back(V[v]);
  51. V[v]->End.push_back(V[u]);
  52. E[i]->st=V[u];
  53. E[i]->en=V[v];
  54. }
  55. }
  56. void Change(long long pos,long long num)
  57. {
  58. V[pos]->val=num;
  59. }
  60. long long Query(long long e)
  61. {
  62. Ans Part1,Part2;
  63. Part1=dfs(E[e]->st,E[e]->en);
  64. Part2=dfs(E[e]->en,E[e]->st);
  65. return Part1.Min*Part1.Max+Part2.Min*Part2.Max;
  66. }
  67. Ans dfs(Node *pos,Node *UnGo)
  68. {
  69. Ans R;long long i;R.Max=R.Min=pos->val;
  70. if(pos->End.size()==0)
  71. return R;
  72. else
  73. {
  74. for(i=0;i<pos->End.size();i++)
  75. {
  76. if(pos->End[i]!=UnGo)
  77. {
  78. R=dfs(pos->End[i],pos);
  79. R.Max=max(pos->val,R.Max);
  80. R.Min=min(pos->val,R.Min);
  81. }
  82. }
  83. return R;
  84. }
  85. }