# include<cstdio>
# include<iostream>
# define MAX 1000+4
# define inf 1e9
using namespace std;
int n,t;
int edge[MAX][MAX];
int dis[MAX];
int vis[MAX];
int u,v;
/*
void init(){
for ( int i = 1;i <= n;i++ ){
for ( int j = 1;j <= n;j++ ){
if ( i==j ){
edge[i][j] = 0;
}
else{
edge[i][j] = inf;
}
}
}
}
void input(){
for(int i=0;i<t;i++){
int t1,t2,t3;
cin>>t1>>t2>>t3;
if(t3<edge[t1][t2]){
edge[t1][t2] = t3;
edge[t2][t1] = t3;
}
}
} */
void Dijkstra(){
for(int i = 1;i <= n;i++ ){
vis[i] = 0;
dis[i] = edge[s][i];//s为题中起点
}
int _min;
for(int i = 1;i <= n-1;i++ ){
_min = inf;
for(int j = 1;j <= n;j++ ){
if (vis[j]==0&&dis[j] < _min ){
_min = dis[j];
u = j;
}
}
vis[u] = 1;
for(v = 1;v <= n;v++ ){
if(vis[v]==0&&dis[v] > /*dis[u]+edge[u][v]视题意要求*/ ){
dis[v] = /*dis[u]+edge[u][v];*/
}
}
}
}
int main(){
/* while(cin>>t>>n ){
init();
input();
Dijkstra();
cout<<dis[1]<<endl;
}*/
return 0;
}
临接表版
struct edge{
int to,w;
};
vector<edge> G[MAXN];
void dijkstra(int s) //s 代表起点
{
for(int i =1;i<=N;i++) d[i]=INF;
d[s]=0; //到某点的最短距离;
priority_queue<pa ,vector<pa>,greater<pa> >Q;
Q.push(pa(0,s)); //第一维代表路径 第二维代表当前点
while(!Q.empty())
{
pa now=Q.top();Q.pop();
int dist=now.first,v=now.second;
if(dist > d[v]) continue;
int len=G[v].size();
for(int i=0;i<len;i++)
{
edge t=G[v][i];
int newdist=t.w+d[v];
if(newdist<d[t.to]) //松弛
{
d[t.to]=newdist;
Q.push(pa(d[t.to],t.to));
}
}
}
return;
}