39分求助
  • 板块P1807 最长路
  • 楼主tyiii
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/13 20:43
  • 上次更新2024/3/13 22:12:56
查看原帖
39分求助
1195979
tyiii楼主2024/3/13 20:43

照着第一篇题解改的代码,但是不知道为什么就是过不了,我copy了第一篇题解,本地跑第一个测试点数据和我代码跑出来的都是-1, 但是把题解copy过来的代码提交就全AC了,实在不明白我代码哪里有问题了

#define  _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

int n, m;
struct Node {
	vector<int>next;
	int deg, val, dis;
}node[1505];
queue<int>que;

int main() {
	cin >> n >> m;
	for (int i = 1; i <= m; ++i) {
		int u, v, w;
		cin >> u >> v >> w;
		node[u].val = w;
		node[u].next.push_back(v);
		++node[v].deg;
	}
	
	for (int i = 2; i <= n; ++i) {
		node[i].dis = -1e9;
		if (!node[i].deg) que.push(i);
	}
	while (!que.empty()) {
		int c = que.front();
		que.pop();
		for (int i = 0; i < node[c].next.size(); ++i) {
			int idx = node[c].next[i];
			if (!--node[idx].deg) que.push(idx);
		}
	}
	que.push(1);
	while (!que.empty()) {
		int c = que.front();
		que.pop();
		for (int i = 0; i < node[c].next.size(); ++i) {
			int idx = node[c].next[i];
			if (!--node[idx].deg) que.push(idx);
		}
		for (int i = 0; i < node[c].next.size(); ++i) {
			int idx = node[c].next[i];
			if (node[c].dis + node[c].val > node[idx].dis)
				node[idx].dis = node[c].dis + node[c].val;
		}
	}
	if (node[n].dis == -1e9) cout << "-1";
	else cout << node[n].dis;
	return 0;
}
2024/3/13 20:43
加载中...