70分求助
查看原帖
70分求助
867577
lucasincyber楼主2024/8/27 14:20

88,99,1010 WA

提交记录

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pr;

const int N = 1e3 + 10;

struct Edge
{
	int x, y, dis;
};

int n, m, s;
int x[N], y[N], z[N], dist[N], ans[N];
bool vis[N];
vector<Edge> tr[N];

void dijkstra(int st)
{
	for (int i = 1; i <= n; i++)
	{
		dist[i] = 0x3f3f3f3f;
		vis[i] = false;
	}
	priority_queue<pr, vector<pr>, greater<pr> > q;
	dist[st] = 0;
	q.push({0, st});
	while (q.size())
	{
		int b = q.top().second;
		q.pop();
		if (vis[b]) continue;
		vis[b] = true;
		for (auto j : tr[b])
		{
			int y = j.y, dist_ = j.dis;
			if (dist[y] > dist[b] + dist_)
			{
				dist[y] = dist[b] + dist_;
				q.push({dist[y], y});
			}
		}
	}
}

int main()
{
	scanf("%d%d%d", &n, &m, &s);
	for (int i = 1; i <= m; i++)
	{
		scanf("%d%d%d", &x[i], &y[i], &z[i]);
		tr[x[i]].push_back({x[i], y[i], z[i]});
	}
	dijkstra(s);
	for (int i = 1; i <= n; i++)
		ans[i] = dist[i];
    for (int i = 1; i <= n; i++)
        tr[i].clear();
	for (int i = 1; i <= m; i++)
		tr[y[i]].push_back({y[i], x[i], z[i]});
	dijkstra(s);
	int res = 0;
	for (int i = 1; i <= n; i++)
		res = max(res, ans[i] + dist[i]);
	printf("%d\n", res);
	return 0;
}
2024/8/27 14:20
加载中...