比赛 |
20190521热身赛 |
评测结果 |
WWWWWWWWWA |
题目名称 |
文化之旅 |
最终得分 |
10 |
用户昵称 |
BYVoid |
运行时间 |
0.004 s |
代码语言 |
C++ |
内存使用 |
4.48 MiB |
提交时间 |
2019-05-21 19:20:23 |
显示代码纯文本
#include<cstdio>
#include<vector>
#define maxn 105
#define inf 2147483647
using namespace std;
int n,k,m,s,t;
int ci[maxn],jud[maxn][maxn];
//struct E{
// int to,w;
//};
//vector<E>edge[maxn*maxn];
//void add(int a,int b,int w){
// edge[a].push_back((E){b,w});
// edge[b].push_back((E){a,w});
//}
int dist[maxn][maxn];
inline void Floyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)dist[i][j] = min(dist[i][j],dist[i][k]+dist[k][j] );
return ;
}
int main()
{
freopen("culture.in","r",stdin);
freopen("culture.out","w",stdout);
scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
if(ci[s]==ci[t]){
printf("-1\n");
return 0;
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(i!=j) dist[i][j] = inf;
for(int i=1;i<=n;i++)scanf("%d",&ci[i]);
for(int i=1;i<=k;i++){
for(int j=1;j<=k;j++){
scanf("%d",&jud[i][j]);
}
}
for(int i=1;i<=m;i++){
int a,b,w;
scanf("%d%d%d",&a,&b,&w);
if(jud[ci[b]][ci[a]]==0&&ci[b]!=ci[a])dist[a][b]=min(dist[a][b],w);
if(jud[ci[a]][ci[b]]==0&&ci[b]!=ci[a])dist[b][a]=min(dist[b][a],w);
}
Floyd();
if(dist[s][t]==2147483647)printf("-1\n");
else printf("%d",dist[s][t]);
return 0;
}
/*
2 2 1 1 2
1 2
0 1
0 0
1 2 10
*/