记录编号 575232 评测结果 AAAAAAAAAA
题目名称 van玩galgame 最终得分 100
用户昵称 GravatarSkloud 是否通过 通过
代码语言 C++ 运行时间 4.194 s
提交时间 2022-09-07 21:07:29 内存使用 75.35 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. const int MAXN = 1000010;
  5. int n, f[MAXN], dp[MAXN], dp2[MAXN], maxn, pos;
  6. vector<int> cd[MAXN], val[MAXN];
  7. bool vis[MAXN];
  8. inline int read(){
  9. int ans=0,sgn=1;
  10. char ch=getchar();
  11. while(!isdigit(ch)){
  12. if (ch=='-')sgn=-1;
  13. ch=getchar();
  14. }
  15. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  16. return ans*sgn;
  17. }
  18. void dfs(int x) {
  19. for(int i = 0; i < cd[x].size(); i ++) {
  20. int u = cd[x][i];
  21. dp[u] = dp[x] + val[x][i];
  22. dfs(u);
  23. }
  24. }
  25. void dfs2(int x) {
  26. for(int i = 0; i < cd[x].size(); i ++) {
  27. int u = cd[x][i];
  28. if(vis[u]) {
  29. dfs2(u);
  30. continue;
  31. }
  32. dp2[u] = dp2[x] + val[x][i];
  33. dfs2(u);
  34. }
  35. }
  36. signed main() {
  37. freopen("galgame.in", "r", stdin);
  38. freopen("galgame.out", "w", stdout);
  39. cin >> n;
  40. for(int i = 1; i <= n; i ++) {
  41. int k;
  42. k = read();
  43. if(k == 0) {
  44. continue;
  45. }
  46. for(int j = 1; j <= k; j ++) {
  47. int x, w;
  48. w = read();
  49. x = read();
  50. cd[i].push_back(x);
  51. val[i].push_back(w);
  52. f[x] = i;
  53. }
  54. }
  55. dfs(1);
  56. for(int i = 1; i <= n; i ++) {
  57. if(dp[i] > maxn) {
  58. maxn = dp[i];
  59. pos = i;
  60. }
  61. }
  62. while(pos) {
  63. vis[pos] = 1;
  64. pos = f[pos];
  65. }
  66. dfs2(1);
  67. int maxm = 0;
  68. for(int i = 1; i <= n; i ++) {
  69. maxm = max(maxm, dp2[i]);
  70. }
  71. printf("%lld", maxn + maxm);
  72. return 0;
  73. }