#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
const int N = 100005;
struct node{
int x,y;
node(){};
node(int xx,int yy){
x=xx;
y=yy;
}
};
vector<node>G[N];
int arr[N],vis[N];
int n,m;
int main(){
freopen("dwarf.in","r",stdin);
freopen("dwarf.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&arr[i]);
for(int i=0;i<m;i++){
int a,u,v;
scanf("%d%d%d",&a,&u,&v);
G[u].push_back(node(v,a));
G[v].push_back(node(u,a));
}
queue<int>p;
for(int i=1;i<=n;i++){
p.push(i);
vis[i]=1;
}
while(!p.empty()){
int u=p.front();
p.pop();
vis[u]=0;
for(int i=0;i<G[u].size();i++){
node temp=G[u][i];
int y=temp.y;
int x=temp.x;
if(arr[y]>arr[x]+arr[u]){
arr[y]=arr[x]+arr[u];
if(!vis[y]) p.push(y);
vis[y]=1;
}
}
}
printf("%d\n",arr[1]);
return 0;
}
Problem D. Dwarf Tower(最短路)
最新推荐文章于 2018-12-27 19:25:29 发布