1 // Coolest Ski Route
2 #include <iostream>
3 #include <cstdio>
4 #include <cstring>
5 #include <string>
6 #include <algorithm>
7 #include <utility>
8 #include <vector>
9 #include <map>
10 #include <queue>
11 #include <stack>
12 #include <cstdlib>
13 #include <cmath>
14 typedef long long ll;
15 #define lowbit(x) (x&(-x))
16 #define ls l,m,rt<<1
17 #define rs m+1,r,rt<<1|1
18 using namespace std;
19 #define pi acos(-1)
20 typedef pair<int,int> P;
21 const int N=1100;
22 const int inf=0x3f3f3f3f;
23 int dis[N];
24 int n,m;
25 struct Node{
26 int to,w;
27 Node(){}
28 Node(int TO,int W){
29 to=TO;
30 w=W;
31 }
32 };
33 vector<Node>vec[N];
34 void bfs(){
35 priority_queue<P,vector<P>,less<P> >que;//队首元素为最长距离
36 for(int i=1;i<=n;i++){
37 que.push(P(0,i));//起初,只有自己到自己
38 }
39 while(!que.empty()){
40 P q=que.top();
41 que.pop();
42 int v=q.second;
43 if(dis[v]>q.first) continue;//比当前的还大,就不用继续往下找了
44 for(int i=0;i<vec[v].size();i++){
45 Node Nod=vec[v][i];
46 int t=Nod.to;
47 if(dis[t]<dis[v]+Nod.w){
48 dis[t]=dis[v]+Nod.w;//不断更新dis[t]
49 que.push(P(dis[t],t));
50 }
51 }
52 }
53 }
54 int main()
55 {
56 scanf("%d%d",&n,&m);
57 int s,t,c;
58 for(int i=0;i<m;i++)
59 {
60 scanf("%d%d%d",&s,&t,&c);
61 vec[s].push_back(Node(t,c));//有向图
62 }
63 memset(dis,0,sizeof(dis));//要初始化为0
64 bfs();
65 int MAX=-inf;
66 for(int i=1;i<=n;i++){
67 MAX=max(MAX,dis[i]);//i为终点,dis[i]为到i的最大路径长度
68 }
69 printf("%d\n",MAX);
70 return 0;
71 }
1 // Coolest Ski Route
2 #include <bits/stdc++.h>
3 #define ll long long
4 using namespace std;
5 const int N = 1e3+10;
6 struct Node{
7 int to,w;
8 Node(){}
9 Node(int TO,int W){
10 to=TO;
11 w=W;
12 }
13 };
14 vector<Node> vs[N];
15 int d[N],in[N];
16 void dfs(int v) {
17 for(int i = 0; i < vs[v].size(); i ++) {
18 Node Nod =vs[v][i];
19 int u=Nod.to;
20 if(d[u] < d[v] + Nod.w ) {
21 d[u] = d[v] + Nod.w;
22 dfs(u);
23 }
24 }
25 }
26 int main() {
27 int n, m;
28 cin >> n >> m;
29 for(int i = 0; i < m; i ++) {
30 int u, v, w;
31 cin >> u >> v >> w;
32 vs[u].push_back(Node(v,w));
33 in[v]++;
34 }
35 for(int i = 1; i <= n; i ++) {
36 if(!in[i])//本题任意两点之间为单向
37 dfs(i);
38 }
39 int MAX = 0;
40 for(int i = 1; i <= n; i ++) MAX = max(MAX, d[i]);
41 printf("%d\n",MAX);
42 return 0;
43 }