Gym - 102021C Coolest Ski Route
题目
给一个有向无环图,求最长路。
分析
d
p
[
i
]
dp[i]
dp[i] 表示从
i
i
i 节点开始的最长路。
从
n
n
n 个点分别记忆化搜索即可。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define pii pair<int, int>
#define mk(x, y) make_pair(x, y)
const int N = 1e4 + 5;
const int M = 1e6 + 5;
int n, m;
int h[N], len[N], ne[N], to[N], idx = 0;
int dp[N];
void add(int u, int v, int w){
to[idx] = v, len[idx] = w, ne[idx] = h[u], h[u] = idx++;
}
int DP(int rt){
int &ans = dp[rt];
if(ans > 0) return ans;
ans = 0;
for(int i = h[rt]; ~i; i = ne[i]){
int v = to[i];
ans = max(ans, DP(v) + len[i]);
}
return ans;
}
int main(){
memset(h, -1, sizeof(h));
scanf("%d%d", &n, &m);
for(int i = 0, u, v, w; i < m; i++){
scanf("%d%d%d", &u, &v, &w);
add(u, v, w);
}
int ans = 0;
for(int i = 1; i <= n; i++){
ans = max(ans, DP(i));
}
printf("%d\n", ans);
return 0;
}