poj 1135求算法大牛见教

poj 1135求算法大牛指教
#include <stdio.h>
#define INF 2147483647
#define MAXN 505
int Edge[MAXN][MAXN];
int sys=1;//测试数据号
int time[MAXN];//第i个牌倒下的时间
int s[MAXN];//记录第i个牌是否倒下
int n,m;
int v1,v2,t;
void read()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++) Edge[i][j]=INF;
    }
    for(int i=0;i<m;i++)
    {
        scanf("%d %d %d",&v1,&v2,&t);
        v1--;
        v2--;
        Edge[v1][v2]=Edge[v2][v1]=t;
    }
}
void dijkstra()
{
    for(int i=0;i<n;i++)
    {
        time[i]=Edge[0][i];
        s[i]=0;
    }
    s[0]=1;time[0]=0;
    for(int i=0;i<n;i++)
    {
        int u=0,min=INF;
        for(int j=0;j<n;j++)
        {
            if(!s[j]&&time[j]<min)
            {
                min=time[j];
                u=j;
            }
        }
        s[u]=1;
        for(int k=0;k<n;k++)
        {
            if(!s[k]&&Edge[u][k]<INF&&time[u]+Edge[u][k]<time[k])
            time[k]=time[u]+Edge[u][k];
        }
    }
    double max1=-INF;
    int pos1;
    for(int i=0;i<n;i++)
    {
        if(time[i]>max1)
        {
            max1=time[i];
            pos1=i;
        //    printf("%lf\n",max1);
        }
    }

    double max2=-INF,t;
    int pos2,pos3;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            t=(time[i]+time[j]+Edge[i][j])/2.0;
            if(t>max2&&Edge[i][j]<INF)
            {