SPFA,用了个链表,不知道哪里错了,求调
#include<bits/stdc++.h>
#define MAXN 100010
#define MAXM 500010
using namespace std;
int n, m, t, b, E;
struct mov{
long long t, x;
}a[MAXN];
bool cmp(mov a, mov b)
{
return a.t < b.t;
}
struct edge{
int to, nxt, w;
}e[MAXM << 1];
int head[MAXN], tot;
void init()
{
memset(head, -1, sizeof(head));
tot = 0;
}
void add(int u, int v, int w)
{
e[tot].to = v, e[tot].w = w, e[tot].nxt = head[u];
head[u] = tot++;
}
long long dis[MAXN];
int l[MAXN], hd, tl;
void SPFA()
{
memset(dis, 63, sizeof(dis));
dis[b] = 0;
l[b] = -1, hd = tl = b;
while(hd != -1)
{
int u = hd;
hd = l[u];
l[u] = 0;
if(head[u] == -1)
{
continue;
}
for(edge i = e[head[u]];; i = e[i.nxt])
{
if(dis[u] + i.w < dis[i.to])
{
dis[i.to] = dis[u] + i.w;
if(!l[i.to])
{
l[tl] = i.to;
tl = i.to;
l[i.to] = -1;
if(hd == -1)
{
hd = i.to;
}
}
}
if(i.nxt == -1)
{
break;
}
}
}
}
int main()
{
init();
cin >> n >> m >> b >> E;
a[1].t = 0, a[1].x = E;
for(int i = 1; i <= m; i++)
{
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
add(u, v, w);
add(v, u, w);
}
cin >> t;
t++;
for(int i = 2; i <= t; i++)
{
scanf("%lld %lld", &a[i].t, &a[i].x);
}
sort(a + 1, a + t + 1, cmp);
SPFA();
for(int i = 1; i <= t - 1; i++)
{
if(dis[a[i].x] < a[i + 1].t)
{
printf("%lld\n", max(dis[a[i].x], a[i].t));
return 0;
}
}
cout << dis[a[t].x] << endl;
}