80分,WA9、10点,不知错那
查看原帖
80分,WA9、10点,不知错那
445650
I_never_left楼主2023/1/24 09:24
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2500 + 5;
int n, m, s, u[N], v[N], w[N], dis1[N], dis2[N], maxx;
bool vis[N];
struct Node {
	int v, w;
};
vector<Node> e[N];
priority_queue<pair<int, int> > q;
void dijkstra1(int s) {
	memset(dis1, 0x3f3f3f3f, sizeof dis1);
	dis1[s] = 0;
	q.push(make_pair(0, s));
	while(!q.empty()) {
		int x = q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x] = 1;
		for(auto v : e[x]) {
			int y = v.v, z = v.w;
			if(dis1[y] > dis1[x] + z) {
				dis1[y] = dis1[x] + z;
				q.push(make_pair(-dis1[y], y));
			}
		}
	}
}
void dijkstra2(int s) {
	memset(vis, 0, sizeof vis);
	memset(dis2, 0x3f3f3f3f, sizeof dis2);
	dis2[s] = 0;
	q.push(make_pair(0, s));
	while(!q.empty()) {
		int x = q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x] = 1;
		for(auto v : e[x]) {
			int y = v.v, z = v.w;
			if(dis2[y] > dis2[x] + z) {
				dis2[y] = dis2[x] + z;
				q.push(make_pair(-dis2[y], y));
			}
		}
	}
}
int main() {
	cin >> n >> m >> s;
	for(int i = 1; i <= m; ++ i) {
		cin >> u[i] >> v[i] >> w[i];
		e[u[i]].push_back(Node{v[i], w[i]});
	}
	dijkstra1(s);
	for(int i = 1; i <= n; ++ i)
		e[i].clear();
	for(int i = 1; i <= m; ++ i)
		e[v[i]].push_back(Node{u[i], w[i]});
	dijkstra2(s);
	for(int i = 1; i <= n; ++ i) {
		if(dis1[i] == 0x3f3f3f3f || dis2[i] == 0x3f3f3f3f) continue;
		maxx = max(maxx, dis1[i] + dis2[i]);
	}
	cout << maxx;
	return 0;
}
2023/1/24 09:24
加载中...