hdu---1874---畅通工程续

http://acm.hdu.edu.cn/showproblem.php?pid=1874

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include<vector>
#include<algorithm>
using namespace std;

const int maxn=100007;
const int INF=0x3f3f3f3f;

int maps[1007][1007];
int dist[maxn];
int vis[maxn];
int n, m;
int S, E;

void Init()
{
    memset(vis, 0, sizeof(vis));
    for(int i=0; i<=n; i++)
    {
        for(int j=0; j<=n; j++)
            maps[i][j]=(i==j)?0:INF;
        dist[i]=INF;
    }
}

int dij()
{
    for(int i=0; i<n; i++)
        dist[i]=maps[S][i];
    vis[S]=1;

    for(int i=0; i<n; i++)
    {
        int Min=INF;
        int index;

        for(int j=0; j<n; j++)
        {
            if(!vis[j]&&dist[j]<Min)
            {
                Min=dist[j];
                index=j;
            }
        }

        vis[index]=1;

        for(int j=0; j<n; j++)
            if(!vis[j]&&dist[j]>Min+maps[index][j])
                dist[j]=Min+maps[index][j];
    }
    return dist[E];
}
int main()
{
    while(~scanf("%d %d", &n, &m))
    {
        Init();
        while(m--)
        {
            int u, v, w;
            scanf("%d %d %d", &u, &v, &w);
            maps[u][v]=maps[v][u]=min(maps[u][v], w);
        }

        scanf("%d %d", &S, &E);
        int ans=dij();

        if(ans>=INF)
            printf("-1
");
        else
            printf("%d
", ans);
    }
}