题目传送门在这里
思路:先用邻接矩阵将图都读入进来,接着把被摧毁的边的值赋值为0,最后再跑一次Floyd即可
代码:
#include <bits/stdc++.h>
#define maxn 200
using namespace std;
int n,m,d;
int dis[maxn];
int mp[maxn][maxn],f[maxn][maxn];
int main()
{
cin>>n>>m;
memset(f,0x3f,sizeof(f));
for (int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
mp[x][y] = mp[y][x] = z;
f[x][y] = f[y][x] = 0;
}
cin>>d;
for (int i=1;i<=d;i++)
{
int x,y;
cin>>x>>y;
f[x][y] = f[y][x] = mp[x][y];
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i !=k && i != j && f[i][j] > f[i][k]+f[k][j])
f[i][j] = f[i][k]+f[k][j];
int A,B;
cin>>A>>B;
cout<<f[A][B]<<endl;
return 0;
}
(本人为新手蒟蒻,大佬轻喷)