75pts 求助 WA#6 #7 #8 #9 #10
查看原帖
75pts 求助 WA#6 #7 #8 #9 #10
795660
DeepSeekR1楼主2024/7/27 16:40
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct edge {
	int to;
	int nxt;
	int a;
} e[2000006];
struct str {
	int id;
	int h;
	int ans;
	bool vis;
	bool operator < (const str &x) const {
        return ans > x.ans;
    }
} a[2000006];
int n,m,k,cnt;
priority_queue <str> q;
void add (int u,int v,int A) {
	cnt++;
	e[cnt].to = v;
	e[cnt].nxt = a[u].h;
	e[cnt].a = A;
	a[u].h = cnt;
}
signed main () {
	cin >> n >> m >> k;
	for (int i = 1;i <= n * k;i++) {
		a[i].id = i;
		a[i].h = 0;
		a[i].vis = 0;
	} 
	int u,v,A;
	for (int i = 1;i <= m;i++) {
		cin >> u >> v >> A;
		for (int j = 1;j <= k;j++) {
			add(u + (j - 1) % k * n,v + j % k * n,A);
		}
	}
	a[1].ans = 0;
	a[1].id = 1;
	q.push(a[1]);
	a[n].ans = -1;
	while (!q.empty()) {
		int p = q.top().id;
		if (p == n) {
			break;
		}
		q.pop();
		if (a[p].vis) {
			continue;
		}
		a[p].vis = 1;
		for (int i = a[p].h;i;i = e[i].nxt) {
			if (a[e[i].to].vis) {
				continue;
			}
			if (a[p].ans <= e[i].a) {
				int c = (e[i].a - a[p].ans + k - 1) / k * k;
				a[e[i].to].ans = a[p].ans + 1 + c;
			} else {
				a[e[i].to].ans = a[p].ans + 1;
			}
			q.push(a[e[i].to]);
		}
	}
	cout << a[n].ans << endl;
	return 0;
}
2024/7/27 16:40
加载中...