1 条题解
-
-1
202509zj05张子瑞 (张子瑞) LV 9 @ 2025-03-21 18:50:18
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#define inf 2100000000
#define N 105
#define For(i,l,r) for(int i=l;i<=r;i++)
#define Dor(i,l,r) for(int i=l;i>=r;i--)
using namespace std;struct node{
vector <int> to;
vector <int> val;
}a[N];
int n,k,m,s,t,c[N],map[N][N],d[N];
void spfa(int s){
For(i,1,n) d[i]=inf;
queue <int> q;
q.push(s);
d[s]=0;
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<a[x].to.size();i++){
int v=a[x].to[i];
int w=a[x].val[i];
if (d[v]>d[x]+w){
d[v]=d[x]+w;
q.push(v);
}
}
}
}
int main(){
scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
For(i,1,n) scanf("%d",&c[i]);
For(i,1,k) For(j,1,k) scanf("%d",&map[i][j]);
For(i,1,m){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if (!map[c[x]][c[y]]) a[x].to.push_back(y),a[x].val.push_back(z);
if (!map[c[y]][c[x]]) a[y].to.push_back(x),a[y].val.push_back(z);
}
spfa(s);
if (d[t]==inf){
printf("-1\n");
}else printf("%d\n",d[t]);
return 0;
}666
- 1