#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;
struct Node{
int y , w;
};
bool operator > (Node a , Node b)
{
if(a.w > b.w)
return true;
if(a.w < b.w)
return false;
}
bool operator < (Node a , Node b)
{
if(a.w < b.w)
return true;
if(a.w < b.w)
return false;
}
const int N = 5e4+5;
int m , n , k , sx , fx;
int x , y , w;
int d[N];
bool vis[N];
vector<Node> g[N];
void dijkstra()
{
memset(d , 0x3f , sizeof(d));
d[sx] = 0;
priority_queue<Node , vector<Node> , greater<Node> > q;
q.push((Node){sx , 0});
while(!q.empty())
{
Node n = q.top();
q.pop();
//vis
int x = n.y;
vis[x] = true;
for(int i = 0 ; i < g[x].size() ; i++)
{
Node t = g[x][i];
int y = t.y;
int w = t.w;
if(d[x] + w < d[y])
{
d[y] = d[x] + w;
if(vis[y])
{
continue;
}
q.push((Node){y , d[y]});
}
}
//
}
}
int main()
{
scanf("%d%d" , &n , &m);
for(int i = 1 ; i <= m ; i++)
{
scanf("%d%d%d" , &x , &y , &w);
g[x].push_back((Node){y , w});
g[y].push_back((Node){x , w});
}
scanf("%d" , &k);
for(int i = 1 ; i <= k ; i++)
{
scanf("%d%d" , &x , &y);
for(int j = 1 ; j <= g[x].size() ; j++)
{
if(g[x][i].y == y)
{
g[x][i].w = 0;
}
}
for(int j = 1 ; j <= g[x].size() ; j++)
{
if(g[y][i].y == x)
{
g[y][i].w = 0;
}
}
}
scanf("%d%d" , sx , fx);
dijkstra();
//cout << "sda" ;
printf("%d" , d[fx]);
return 0;
}
求助dalao,为什么不能输出?感觉dijkstra打的没错啊?