比赛 |
20190521热身赛 |
评测结果 |
AAAAAAAAAA |
题目名称 |
文化之旅 |
最终得分 |
100 |
用户昵称 |
十二12 |
运行时间 |
0.030 s |
代码语言 |
C++ |
内存使用 |
13.97 MiB |
提交时间 |
2019-05-21 19:21:09 |
显示代码纯文本
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
int n,k,m,s,t,dis[105],cnt,tot,head1[10004],head2[10004],kind[1005],a[105][105];
struct node {
int u,d;
};
inline bool operator < (node a,node b) {
return a.d > b.d;
}
priority_queue <node> q;
struct EDGE{
int to,nxt;
}e[10004];
struct edge{
int to,nxt,d;
}ed[10004];
void add1(int x,int y,int d)
{
tot++;
ed[tot].d=d;
ed[tot].nxt=head2[x];
ed[tot].to=y;
head2[x]=tot;
//cout<<head2[x]<<endl;
}
int dij(int s) {
for(int i=0; i<=n; i++) dis[i] = 0x7fffffff;
dis[s] = 0;
q.push( (node) {
s,0
} );
while( !q.empty() ) {
node from = q.top();
q.pop();
int u = from.u;
for(int i=head2[u]; i; i=ed[i].nxt) {
int v = ed[i].to;
int w = ed[i].d;
if(dis[u]!=from.d)
continue;
if(dis[v] > dis[u] + w&&!a[kind[v]][kind[u]]) {
dis[v] = dis[u] + w;
q.push( (node) {
v,dis[v]
} );
}
}
}
}
int main()
{ freopen("culture.in","r",stdin);
freopen("culture.out","w",stdout);
cin>>n>>k>>m>>s>>t;
for(int i=1;i<=n;i++)
{
cin>>kind[i];
}
for(int i=1;i<=k;i++)
{
for(int j=1;j<=k;j++)
{
int x;
cin>>x;
a[i][j]=x;
}
}
for(int i=1;i<=m;i++)
{
int u,v,d;
cin>>u>>v>>d;
add1(u,v,d);
add1(v,u,d);
/* for(int i=head1[u];i;i=e[i].nxt)
{
int t=e[i].to;
if(t==v)
continue;
else add1(u,v,d);
}
for(int i=head1[v];i;i=e[i].nxt)
{
int t=e[i].to;
cout<<t<<endl;;
if(t==u)
continue;
else add1(v,u,d);
}*/
}
dij(s);
if(kind[s]==kind[t])
{
cout<<"-1";
return 0;
}
if(dis[t]!=0x7fffffff)
cout<<dis[t];
else {
cout<<"-1";
}
return 0;
}