• POJ 1062 昂贵的礼物


    最短路问题

    #include<iostream>
    #include<cstring>
    using namespace std;
    const int inf=0xfffffff;
    int dis[101],vis[101],map[101][101],v[101];
    int n,m;
    int dijkstra()
    {
        int i,j,sd,node;
        for(i=1;i<=n;i++)
            dis[i]=map[0][i];
        for(i=0;i<n;i++)
        {
            sd=inf;node=0;
            for(j=1;j<=n;j++)
            {
                if(!vis[j] && sd>dis[j])
                {
                    sd=dis[j];node=j;
                }
            }
            if(node==0) break;
            vis[node]=1;
            for(j=1;j<=n;j++)
            {
                if(!vis[j] && map[node][j]>0 && dis[j]>dis[node]+map[node][j]) dis[j]=dis[node]+map[node][j];
            }
        }
        return dis[1];
    }
    int main()
    {
        int i,j,l,x,t,max,min=inf;
        memset(dis,0,sizeof(dis));
        memset(vis,inf,sizeof(vis));
        memset(map,0,sizeof(map));
        memset(v,0,sizeof(v));
        cin>>m>>n;
        for(i=1;i<=n;i++)
        {
            cin>>map[0][i]>>v[i]>>x;
            for(j=0;j<x;j++)
            {
                cin>>t>>l;
                map[t][i]=l;
            }
        }
        for(i=1;i<=n;i++)
        {
            max=v[i];
            for(j=1;j<=n;j++)
            {
                if(v[j]>max || max-v[j]>m) vis[j]=1;
                else vis[j]=0;
            }
            t=dijkstra();
            if(min>t) min=t;
        }
        cout<<min<<endl;
        return 0;
    }
    


  • 相关阅读:
    基础
    基础
    基础
    基础
    基础
    基础
    基础
    基础
    Gym102361A Angle Beats(直角三角形 计算几何)题解
    Petrozavodsk Summer Training Camp 2016H(多标记线段树)题解
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218256.html
Copyright © 2020-2023  润新知