因爲要求路徑上最小路的長度的最大值,可以想到dijkstra思想,優先隊列要維護當前長度大的在隊頂,賦值把dis數組賦爲-INF,源點節點的dis賦爲INF。
每次鄰接表沒清空,看了半小時,汗。
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <string.h>
#include <limits.h>
#include <string>
#include <iostream>
#include <queue>
#include <math.h>
#include <map>
#include <stack>
#include <sstream>
#include <set>
#include <iterator>
#include <list>
#include <cstdio>
#include <iomanip>
#include <climits>
#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define forn(i, n) for (int i = 0; i < (int)(n); ++i)
#define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
#define ford(i, a, b) for (int i = (int)(a); i >= (int)b; --i)
#define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)
#define rep(i, l, r) for (int i = (l); i <= (r); i++)
#define per(i, r, l) for (int i = (r); i >= (l); i--)
#define ms(x, y) memset(x, y, sizeof(x))
#define SZ(x) ((int)(x).size())
using namespace std;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<pii> vpi;
typedef vector<vi> vvi;
typedef long long i64;
typedef vector<i64> vi64;
typedef vector<vi64> vvi64;
typedef pair<i64, i64> pi64;
typedef double ld;
template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }
const int maxn = 1100; //點數
const i64 INF = 0x3f3f3f3f;
struct node {
int id, w;
node(){}
node(int a, int b) : id(a), w(b) {}
friend bool operator < (node a, node b) {return a.w < b.w;}
};
vector<node> G[maxn];
bool vis[maxn];
int dis[maxn];
void dij(int s, int n) {
priority_queue<node> q;
node cur;
ms(vis, 0);
for (int i = 1; i <= n; ++i) dis[i] = -INF;
dis[s] = INF;
q.push(node(s, INF));
while (!q.empty()) {
cur = q.top();
q.pop();
if (vis[cur.id]) continue;
vis[cur.id] = 1;
for (int i = 0; i < SZ(G[cur.id]); ++i) {
node to = G[cur.id][i];
if (!vis[to.id] && dis[to.id] < min(dis[cur.id], to.w)) {
dis[to.id] = min(dis[cur.id], to.w);
q.push(node(to.id, dis[to.id]));
}
}
}
}
void init(int n) {
for (int i = 0; i <= n; ++i) G[i].clear();
}
int main() {
#ifdef LOCAL_DEFINE
freopen("input.txt", "r", stdin);
#endif
int tc, n, m;
scanf("%d", &tc);
for (int k = 1; k <= tc; ++k) {
scanf("%d%d", &n, &m);
init(n);
forn(i, m) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
G[u].pb(node(v, w));
G[v].pb(node(u, w));
}
dij(1, n);
printf("Scenario #%d:\n", k);
printf("%d\n\n", dis[n]);
}
return 0;
}