#2寄了求大佬帮帮孩子吧

P1807 最长路

解决了,只需要把dis数组全初始化为负无穷 ```cpp #include<iostream> #include<cstring> #include<vector> #include<queue> using namespace std; const int N = 5 * 1e4 + 10; const int INF = 0x3f3f3f3f; struct Edge { int to; int w; }; vector<Edge> e[N]; int n, m; int indegree[N]; int outdegree[N]; long long dis[N]; void topsort() { //拓扑排序 queue<int>q; q.push(1); dis[1] = 0; while (q.size()) { int t = q.front(); q.pop(); for (int i = 0; i < e[t].size(); i++) { int j = e[t][i].to, ww = e[t][i].w; indegree[j]--; dis[j] = max(dis[t] + ww, dis[j]); if (indegree[j] == 0)q.push(j); } } } int main() { cin >> n >> m; memset(dis,0x80,sizeof dis); for (int i = 0; i < m; i++) { int a; Edge ee; cin >> a >> ee.to >> ee.w; e[a].push_back(ee); indegree[ee.to]++; outdegree[a]++; } queue<int>q1; //以下为排除除了1以外的入度为零的点 for (int i = 2; i <= n; i++) { if (indegree[i] == 0)q1.push(i); } while (q1.size()) { int t = q1.front(); q1.pop(); for (int i = 0; i < e[t].size(); i++) { int j = e[t][i].to; indegree[j]--; if (indegree[j] == 0)q1.push(j); } } topsort(); if (dis[n] < -1e5)printf("-1"); else printf("%d", dis[n]); return 0; } ```
by Hopoyage @ 2024-01-12 11:16:08


|