记录编号 590772 评测结果 EEEEEEEEEE
题目名称 [SYOI 2015] Asm.Def的基本算法 最终得分 0
用户昵称 Gravatardream 是否通过 未通过
代码语言 C++ 运行时间 2.239 s
提交时间 2024-07-11 12:35:33 内存使用 3.06 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=10005,mod=1e9+7;
  4. int w[N];
  5. int n;
  6. int fa[N];
  7. int mk[N];
  8. int cnt;
  9. int jyh[N][N];
  10. int read(){
  11. char c;
  12. int f=1,sum=0;
  13. c=getchar();
  14. while(c<'0'||c>'9'){
  15. if(c=='-'){
  16. f=-1;
  17. }
  18. c=getchar();
  19. }
  20. while(c>='0'&&c<='9'){
  21. sum=sum*10+c-'0';
  22. c=getchar();
  23. }
  24. return sum*f;
  25. }
  26. void add(int x,int y){
  27. fa[x]=y;
  28. }
  29. int lca(int x,int y){
  30. int flag=0;
  31. if(x<y){
  32. swap(x,y);
  33. flag=1;
  34. }
  35. for(int i=1;i<=n;i++){
  36. mk[i]=0;
  37. }
  38. for(int i=x;i!=1;i=fa[i]){
  39. // cout<<fa[i]<<" ";
  40. mk[i]=1;
  41. }
  42. for(int i=y;i;i=fa[i]){
  43. if(mk[i]){
  44. if(!flag){
  45. jyh[x][y]=i;
  46. }
  47. if(flag){
  48. jyh[y][x]=i;
  49. }
  50. return i;
  51. }
  52. }
  53. }
  54. int main(){
  55. // freopen("asm_algo.in","r",stdin);
  56. // freopen("asm_algo.out","w",stdout);
  57. n=read();
  58. w[1]=read();
  59. fa[1]=0;
  60. for(int i=2;i<=n;i++){
  61. int p;
  62. p=read();
  63. w[i]=read();
  64. add(i,p);
  65. }
  66. int res=0;
  67. for(int i=1;i<=n;i++){
  68. for(int j=1;j<=n;j++){
  69. int lcaa;
  70. if(!jyh[i][j]){
  71. lcaa=lca(i,j);
  72. }
  73. else{
  74. lcaa=jyh[i][j];
  75. }
  76. int ans=1;
  77. ans*=w[i];
  78. ans%=mod;
  79. ans*=w[j];
  80. ans%=mod;
  81. ans*=w[lcaa];
  82. ans%=mod;
  83. res+=ans;
  84. res%=mod;
  85. }
  86. }
  87. cout<<res;
  88. return 0;
  89. }