1 条题解

  • -1

    #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

信息

ID
1475
难度
9
分类
搜索 | 图结构 | 最短路 点击显示
标签
递交数
3
已通过
3
通过率
100%
上传者