本地没错,洛谷#10RE
  • 板块P1396 营救
  • 楼主FarmerDrone
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/26 22:02
  • 上次更新2024/3/26 22:04:09
查看原帖
本地没错,洛谷#10RE
1122193
FarmerDrone楼主2024/3/26 22:02

(蒻刚学最短路,代码几乎与模版P3371代码一样) (至于红名,我也不知道为什么)

#include <bits/stdc++.h>
using namespace std;
int n, m, s, t;
const int MAXN = 20000, MAXM = 30000, MAX = 2147483647;

class EDGE
{
public:
	int next, to, w;
} edge[MAXM];

int head[MAXN], cnt;

void u_v (int u, int v, int W)
{
	cnt++;
	edge[cnt].next = head[u];
	edge[cnt].to = v;
	edge[cnt].w = W;
	head[u] = cnt;
} 

bool vis[MAXN];

int main()
{
	cin >> n >> m >> s >> t;
	int ans[n + 1];
	for (int i = 1; i <= n; i++)
		ans[i] = MAX;
	int u, v, wei;
	for (int i = 0; i < m; i++)
	{
		scanf("%d%d%d", &u, &v, &wei);
		u_v(u, v, wei);
		u_v(v, u, wei);	
	}
	int cu = s;
	ans[s] = 0;
	while (!vis[cu])
	{
		vis[cu] = 1;
		for (int i = head[cu]; i != 0; i = edge[i].next)
			if (ans[edge[i].to] > max(ans[cu], edge[i].w) && !vis[edge[i].to])
				ans[edge[i].to] = max(ans[cu], edge[i].w);
		int min = MAX;
		for (int i = 1; i <= m; i++)
			if (!vis[i] && ans[i] < min)
				min = ans[i], cu = i;
	}
	cout << ans[t] << endl;
}
2024/3/26 22:02
加载中...