负环求调
  • 板块学术版
  • 楼主2huk
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/1 14:42
  • 上次更新2024/10/1 16:47:54
查看原帖
负环求调
748509
2huk楼主2024/10/1 14:42

CSES-1673

36.0 / 44.0 Wrong Answer

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;

typedef long long ll;
#define int ll

int n, m;
int h[N], e[N], ne[N], w[N], idx;

void add(int a, int b, int c) {
	e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx ++ ;
}

int dis[N], cnt[N];
bool st[N];

signed main() {
	cin >> n >> m;
	
	memset(h, -1, sizeof h);
	while (m -- ) {
		int a, b, c;
		cin >> a >> b >> c;
		add(a, b, c);
	}
	
	memset(dis, -0x3f, sizeof dis);
	dis[1] = 0;
	
	queue<int> q;
	q.push(1);
	st[1] = true;
	
	while (q.size()) {
		int u = q.front();
		q.pop();
		
		st[u] = false;
		
		for (int i = h[u]; ~i; i = ne[i]) {
			int v = e[i], w = ::w[i];
			
			if (dis[v] < dis[u] + w) {
				dis[v] = dis[u] + w;
				cnt[v] = cnt[u] + 1;
				
				if (cnt[v] > n) {
					puts("-1");
					return 0;
				}
				
				if (!st[v]) {
					q.push(v);
					st[v] = true;
				}
			}
		}
	}
	
	cout << dis[n];
	
	return 0;
}
2024/10/1 14:42
加载中...