- 题解
WA!!!Why?
- 2023-3-25 21:33:39 @
(((
真 wa 了 qwq
90pts
又臭又长的 dij
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define ll long long
#define ul unsigned long long
using namespace std;
map<string, int> mp;
struct Edge {
int to, nxt, dis;
}e[1919810];
int cnt;
int hd[1919810];
int dis[1919810];
struct Node {
int x, dis;
bool operator < (const Node& p) const {
return dis > p.dis;
}
};
priority_queue<Node> q;
void add_edge(int u, int v, int d) {
++cnt;
e[cnt].to = v;
e[cnt].nxt = hd[u];
e[cnt].dis = d;
hd[u] = cnt;
}
void Dijkstra(int s) {
Node al, be;
al.x = s;
al.dis = 0;
dis[s] = 0;
q.push(al);
while (!q.empty()) {
be = q.top();
q.pop();
int u, v, d;
u = be.x;
for (int i = hd[u]; i; i = e[i].nxt) {
v = e[i].to;
d = e[i].dis + be.dis;
if (d < dis[v]) {
dis[v] = d;
al.x = v; al.dis = d;
q.push(al);
}
}
}
}
void Solv() {
int n, m, d;
n = 0;
scanf ("%d", &m);
for (int i = 1; i <= m; ++i) {
string a, b;
int u, v;
cin >> a >> b >> d;
if (!mp[a]) mp[a] = u = ++n;
else u = mp[a];
if (!mp[b]) mp[b] = v = ++n;
else v = mp[b];
add_edge(u, v, d);
add_edge(v, u, d);
}
string a, b;
cin >> a >> b;
int s, t;
s = mp[a]; t = mp[b];
for (int i = 0; i <= 10000; ++i) dis[i] = 0x7fffffff;
Dijkstra(s);
if (dis[t] != 0x7fffffff) cout << dis[t] << endl;
else cout << -1 << endl;
mp.erase(mp.begin(), mp.end());
for (int i = 1; i <= cnt; ++i) e[i] = (Edge){0, 0, 0};
cnt = 0;
for (int i = 1; i <= 10000; ++i) hd[i] = 0;
}
int main() {
int T;
scanf ("%d", &T);
while (T--) Solv();
}
0 条评论
目前还没有评论...