http://swjtuoj.cn/problem/2387/

设dp[cur]表示以cur这个节点为起点的时候,能走的最大贡献。

题目保证没环,也就是没回路。

感觉和树dp差不多了。

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <assert.h>
  7. #define IOS ios::sync_with_stdio(false)
  8. using namespace std;
  9. #define inf (0x3f3f3f3f)
  10. typedef long long int LL;
  11.  
  12. #include <iostream>
  13. #include <sstream>
  14. #include <vector>
  15. #include <set>
  16. #include <map>
  17. #include <queue>
  18. #include <string>
  19. #include <bitset>
  20. const int maxn = + ;
  21. struct Node {
  22. int u, v, w;
  23. int tonext;
  24. }e[maxn * maxn];
  25. int first[maxn], num;
  26. void add(int u, int v, int w) {
  27. ++num;
  28. e[num].u = u, e[num].v = v, e[num].w = w;
  29. e[num].tonext = first[u];
  30. first[u] = num;
  31. }
  32. int vis[maxn], dp[maxn], DFN;
  33. int dfs(int cur) {
  34. if (vis[cur] == DFN) return dp[cur];
  35. vis[cur] = DFN;
  36. int res = ;
  37. for (int i = first[cur]; i; i = e[i].tonext) {
  38. int v = e[i].v;
  39. res = max(res, dfs(v) + e[i].w);
  40. }
  41. return dp[cur] = res;
  42. }
  43. void work() {
  44. memset(first, , sizeof first);
  45. int n, m;
  46. scanf("%d%d", &n, &m);
  47. for (int i = ; i <= m; ++i) {
  48. int u, v, w;
  49. scanf("%d%d%d", &u, &v, &w);
  50. u++;
  51. v++;
  52. add(u, v, w);
  53. }
  54. ++DFN;
  55. int ans = ;
  56. memset(dp, , sizeof dp);
  57. for (int i = ; i <= n; ++i) {
  58. if (vis[i] == DFN) continue;
  59. dp[i] = dfs(i);
  60. }
  61. for (int i = ; i <= n; ++i) ans = max(ans, dp[i]);
  62. printf("%d\n", ans);
  63. }
  64.  
  65. int main() {
  66. #ifdef local
  67. freopen("data.txt", "r", stdin);
  68. // freopen("data.txt", "w", stdout);
  69. #endif
  70. int t;
  71. scanf("%d", &t);
  72. while (t--) work();
  73. return ;
  74. }

Magic Maze dfs + dp的更多相关文章

  1. dfs+dp思想的结合------hdu1078

    首先是题目的意思: 从一个正方形的0,0点开始走,只能横着走,竖着走,最多走k步,下一个点的数一定要比当前这个点的值大,每走一步,就加上下一个点的数据,问数据最大能有多少. 首先遇到这种题目,走来走去 ...

  2. HDU1978How Many Ways 记忆化dfs+dp

    /*记忆化dfs+dp dp[i][j]代表达到这个点的所有路的条数,那么所有到达终点的路的总数就是这dp[1][1]加上所有他所能到达的点的 所有路的总数 */ #include<stdio. ...

  3. 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof

    题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...

  4. 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty

    题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...

  5. 【cf1111】C. Creative Snap (dfs+dp)

    传送门 简单的dfs+dp即可解决.根本不用动态开点 /* * Author: heyuhhh * Created Time: 2019/11/13 10:12:42 */ #include < ...

  6. CodeForces 628 D Magic Numbers 数位DP

    Magic Numbers 题意: 题意比较难读:首先对于一个串来说, 如果他是d-串, 那么他的第偶数个字符都是是d,第奇数个字符都不是d. 然后求[L, R]里面的多少个数是d-串,且是m的倍数. ...

  7. 滑雪(dfs+dp)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 113903   Accepted: 43478 Description ...

  8. HDU 1978 记忆化搜索(dfs+dp)

    Y - How many ways Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. [NOIP1999提高] CODEVS 1047 邮票面值设计(dfs+dp)

    dfs出邮票的各种面值,然后dp求解. ------------------------------------------------------------------------------- ...

随机推荐

  1. NPM 在MacOSX中的使用技巧

    经常看到有人说『为啥npm install 的时候报错,显示EACCESS错误…』,之前大家都是sudo大法解决问题,也没太在意. 至于这个问题是brew安装工具的时候造成的,还是系统修改磁盘权限造成 ...

  2. ubuntu强制卸载软件

    以卸载cups为例子 一:列出软件列表,找到需要卸载的软件的名字命令:dpkg --list

  3. kindle3 破解字体

    在万能的链接里下载kindle-fonts-4.4.N-k3.zip,update后kindle里出现linkfonts/fonts,这里就是存放字体的位置,字体格式需用.ttf. 在linkfont ...

  4. RT-Thread信号量使用(动态/静态信号量) 及 信号量的四种使用场合

    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用.在进入一个关键代码段之前,线程必须获取一个信号量:一旦该关键代码段完成了 ...

  5. VIJOS:P1082丛林探险

    描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险.在出发之前,他搜集了 ...

  6. ElementRef, @ViewChild & Renderer

    ElementRef: In Angular2 Doc, it suggest to "avoid" using ElementRef. It access DOM directl ...

  7. maven 依赖范围

  8. [hdu3078]Network(LCA+排序)

    题意:维护树上两点之间的最短路径,其一,将点a的值变为b,其二,求路径上第k大的值. 解题关键:LCA+sort 复杂度:$O(qn\log n + n\log n)$ 数据弱不怪我 //#pragm ...

  9. POJ-3187

    Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7634   Accepted: 43 ...

  10. Consuming JSON Strings in SQL Server

    https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/ Consuming JS ...