社区讨论
90分求助
P1186玛丽卡参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo3368ew
- 此快照首次捕获于
- 2023/10/24 00:02 2 年前
- 此快照最后确认于
- 2023/10/24 00:02 2 年前
rt,最后四个点TLE
C#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1005;
int n, m, g[N][N], dis[N], minn, k, ans, x, y;
bool vis[N], flag;
int pre[N];
int min(int a, int b) {
return a < b ? a : b;
}
void dijkstra()
{
memset(dis, 0x3f, sizeof(dis));
memset(vis, false, sizeof(vis));
dis[1] = 0;
for (int i = 1; i < n; i++)
{
minn = dis[0];
for (int j = 1; j <= n; j++)
{
if (!vis[j] && dis[j] < minn)
{
minn = dis[j];
k = j;
}
}
vis[k] = true;
for (int j = 1; j <= n; j++)
{
if (flag && ((k == x && j == y) || (k == y && j == x)))
continue;
if (!vis[j] && dis[k] + g[k][j] < dis[j])
{
dis[j] = dis[k] + g[k][j];
if (!flag)
pre[j] = k;
}
}
}
ans = max(ans, dis[n]);
}
signed main()
{
memset(g, 0x3f, sizeof(g));
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
int a, b, v;
cin >> a >> b >> v;
g[a][b] = g[b][a] = min(g[a][b], v);
}
dijkstra();
flag = true;
for (int i = n; i; i = pre[i])
{
x = i;
y = pre[i];
dijkstra();
}
cout << ans << endl;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...