POJ 1797 Heavy Transportation

 

传送门:http://poj.org/problem?id=1797

不想吐槽了,弄了好久才AC

实现代码:

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

const int maxn=1005;
const int INF=1<<20;

int w[maxn][maxn];
int dis[maxn];
int vis[maxn];


void dijktra(int n){
    for(int i=1;i<=n;i++){
        dis[i]=w[1][i];
        vis[i]=0;
    }
    vis[1]=1;


    for(int k=1;k<=n;k++){
        int t=-1;
        int m=-INF;

        for(int i=1;i<=n;i++){
            if(!vis[i]&&m<dis[i]){
                t=i;
                m=dis[i];
            }
        }
        if(t==-1)
            return;
        vis[t]=1;


        for(int i=1;i<=n;i++){
            if(!vis[i]&&w[i][t]!=0){
                if(min(dis[t],w[i][t])>dis[i])
                    dis[i]=min(dis[t],w[i][t]);
            }
        }

    }
}

int main(){
    int t;
    scanf("%d",&t);
    for(int k=1;k<=t;k++ ){

        int n,m;
        scanf("%d%d",&n,&m);
        memset(w,0,sizeof(w));

        for(int i=0;i<m;i++){
            int u,v,h;
            scanf("%d%d%d",&u,&v,&h);
            w[u][v]=h;
            w[v][u]=h;
        }
        dijktra(n);
        printf("Scenario #%d:\n",k);
        printf("%d\n\n",dis[n]);


    }
    return 0;
}

 

posted on 2017-03-02 17:41  mkfoy  阅读(149)  评论(0)    收藏  举报

导航