题目
分析
代码
1 #include<iostream>
2 #include<queue>
3 #include<vector>
4 #include<cstring>
5 #include<cstdio>
6 using namespace std;
7 vector<int> f[1001];
8 int a[201][201],map[201][201],dis[201],vis[201];
9 void spfa(int s)
10 {
11 memset(dis,0x3f,sizeof(dis));
12 queue<int> q;
13 q.push(s); vis[s]=1; dis[s]=0;
14 while (!q.empty())
15 {
16 int x=q.front(); q.pop(); vis[x]=0;
17 for (int i=0;i<f[x].size();i++)
18 {
19 int y=f[x][i];
20 if (dis[x]+map[x][y]<dis[y])
21 {
22 dis[y]=dis[x]+map[x][y];
23 if (!vis[y])
24 {
25 vis[y]=1;
26 q.push(y);
27 }
28 }
29 }
30 }
31 }
32 int main ()
33 {
34 freopen("road.in","r",stdin);
35 freopen("road.out","w",stdout);
36 int n,m; scanf("%d%d",&n,&m);
37 for (int i=1,x,y,z;i<=m;i++)
38 {
39 scanf("%d%d%d",&x,&y,&z);
40 f[x].push_back(y);
41 f[y].push_back(x);
42 a[x][y]=z;
43 a[y][x]=z;
44 }
45 int D; scanf("%d",&D);
46 for (int i=1,x,y;i<=D;i++)
47 {
48 scanf("%d%d",&x,&y);
49 map[y][x]=map[x][y]=a[x][y];
50 }
51 int s,t;
52 scanf("%d%d",&s,&t);
53 spfa(s);
54 cout<<dis[t];
55 }