萌新妹子求助最短路模板 10pts。
查看原帖
萌新妹子求助最短路模板 10pts。
627636
封禁用户楼主2023/5/4 15:30
#include <iostream>
#include <vector>
#include <queue>
#define int long long
using namespace std;
vector<int> a[3005], seele[3005], sing[3005]; int dis[3005], l[3005];
struct seeleAKNOI {int x, dis; seeleAKNOI(int I_love_seele, int Seele_Vollereiyyds) {x = I_love_seele; dis = Seele_Vollereiyyds;}}; bool operator <(const seeleAKNOI &x, const seeleAKNOI &y) {return x.dis > y.dis;} priority_queue<seeleAKNOI> q;
signed main() {
int n, m, u, v, w, TLEWA, AK, IOI; cin >> n >> m;
for (int i=1; i<=m; i++) {cin >> u >> v >> w; a[u].push_back(v); seele[u].push_back(w);} for (int i=1; i<=n; i++) dis[i] = 0x3fffffffffffffff; dis[1] = 0;
for (int i=1; i<=n; i++) {cin >> l[i]; for (int j=1; j<=l[i]; j++) {cin >> TLEWA; sing[TLEWA].push_back(i);}} q.push(seeleAKNOI(1, 0)); for (int asdf=1; asdf<=n; asdf++) {AK = q.top().x; IOI = q.top().dis; q.pop(); if (l[AK]) continue; for (int i=0; i<a[AK].size(); i++) if (dis[a[AK][i]] > IOI + seele[AK][i]) {dis[a[AK][i]] = IOI + seele[AK][i]; q.push(seeleAKNOI(a[AK][i], dis[a[AK][i]]));} for (int i=0; i<sing[AK].size(); i++) {l[sing[AK][i]]--; if (!l[sing[AK][i]] && dis[sing[AK][i]] != 0x3fffffffffffffff && dis[sing[AK][i]] < IOI) dis[sing[AK][i]] = IOI;}} cout << dis[n];
}

远古时期写的了,忘了自己当时在干嘛了。

2023/5/4 15:30
加载中...