Magic Maze dfs + dp
http://swjtuoj.cn/problem/2387/
设dp[cur]表示以cur这个节点为起点的时候,能走的最大贡献。
题目保证没环,也就是没回路。
感觉和树dp差不多了。
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <assert.h>
- #define IOS ios::sync_with_stdio(false)
- using namespace std;
- #define inf (0x3f3f3f3f)
- typedef long long int LL;
- #include <iostream>
- #include <sstream>
- #include <vector>
- #include <set>
- #include <map>
- #include <queue>
- #include <string>
- #include <bitset>
- const int maxn = + ;
- struct Node {
- int u, v, w;
- int tonext;
- }e[maxn * maxn];
- int first[maxn], num;
- void add(int u, int v, int w) {
- ++num;
- e[num].u = u, e[num].v = v, e[num].w = w;
- e[num].tonext = first[u];
- first[u] = num;
- }
- int vis[maxn], dp[maxn], DFN;
- int dfs(int cur) {
- if (vis[cur] == DFN) return dp[cur];
- vis[cur] = DFN;
- int res = ;
- for (int i = first[cur]; i; i = e[i].tonext) {
- int v = e[i].v;
- res = max(res, dfs(v) + e[i].w);
- }
- return dp[cur] = res;
- }
- void work() {
- memset(first, , sizeof first);
- int n, m;
- scanf("%d%d", &n, &m);
- for (int i = ; i <= m; ++i) {
- int u, v, w;
- scanf("%d%d%d", &u, &v, &w);
- u++;
- v++;
- add(u, v, w);
- }
- ++DFN;
- int ans = ;
- memset(dp, , sizeof dp);
- for (int i = ; i <= n; ++i) {
- if (vis[i] == DFN) continue;
- dp[i] = dfs(i);
- }
- for (int i = ; i <= n; ++i) ans = max(ans, dp[i]);
- printf("%d\n", ans);
- }
- int main() {
- #ifdef local
- freopen("data.txt", "r", stdin);
- // freopen("data.txt", "w", stdout);
- #endif
- int t;
- scanf("%d", &t);
- while (t--) work();
- return ;
- }
Magic Maze dfs + dp的更多相关文章
- dfs+dp思想的结合------hdu1078
首先是题目的意思: 从一个正方形的0,0点开始走,只能横着走,竖着走,最多走k步,下一个点的数一定要比当前这个点的值大,每走一步,就加上下一个点的数据,问数据最大能有多少. 首先遇到这种题目,走来走去 ...
- HDU1978How Many Ways 记忆化dfs+dp
/*记忆化dfs+dp dp[i][j]代表达到这个点的所有路的条数,那么所有到达终点的路的总数就是这dp[1][1]加上所有他所能到达的点的 所有路的总数 */ #include<stdio. ...
- 记忆化搜索(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]) + ...
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...
- 【cf1111】C. Creative Snap (dfs+dp)
传送门 简单的dfs+dp即可解决.根本不用动态开点 /* * Author: heyuhhh * Created Time: 2019/11/13 10:12:42 */ #include < ...
- CodeForces 628 D Magic Numbers 数位DP
Magic Numbers 题意: 题意比较难读:首先对于一个串来说, 如果他是d-串, 那么他的第偶数个字符都是是d,第奇数个字符都不是d. 然后求[L, R]里面的多少个数是d-串,且是m的倍数. ...
- 滑雪(dfs+dp)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 113903 Accepted: 43478 Description ...
- HDU 1978 记忆化搜索(dfs+dp)
Y - How many ways Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- [NOIP1999提高] CODEVS 1047 邮票面值设计(dfs+dp)
dfs出邮票的各种面值,然后dp求解. ------------------------------------------------------------------------------- ...
随机推荐
- NPM 在MacOSX中的使用技巧
经常看到有人说『为啥npm install 的时候报错,显示EACCESS错误…』,之前大家都是sudo大法解决问题,也没太在意. 至于这个问题是brew安装工具的时候造成的,还是系统修改磁盘权限造成 ...
- ubuntu强制卸载软件
以卸载cups为例子 一:列出软件列表,找到需要卸载的软件的名字命令:dpkg --list
- kindle3 破解字体
在万能的链接里下载kindle-fonts-4.4.N-k3.zip,update后kindle里出现linkfonts/fonts,这里就是存放字体的位置,字体格式需用.ttf. 在linkfont ...
- RT-Thread信号量使用(动态/静态信号量) 及 信号量的四种使用场合
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用.在进入一个关键代码段之前,线程必须获取一个信号量:一旦该关键代码段完成了 ...
- VIJOS:P1082丛林探险
描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险.在出发之前,他搜集了 ...
- ElementRef, @ViewChild & Renderer
ElementRef: In Angular2 Doc, it suggest to "avoid" using ElementRef. It access DOM directl ...
- maven 依赖范围
- [hdu3078]Network(LCA+排序)
题意:维护树上两点之间的最短路径,其一,将点a的值变为b,其二,求路径上第k大的值. 解题关键:LCA+sort 复杂度:$O(qn\log n + n\log n)$ 数据弱不怪我 //#pragm ...
- POJ-3187
Backward Digit Sums Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7634 Accepted: 43 ...
- Consuming JSON Strings in SQL Server
https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/ Consuming JS ...