zoukankan      html  css  js  c++  java
  • 1072 Gas Station (30 分)(最短路径)

    #include<bits/stdc++.h>
    
    using namespace std;
    const int N=1e3+100;
    int n,m,k,Ds;
    int mp[N][N];
    int dis[N];
    int vis[N];
    int inf=0x3f3f3f3f;
    int toint(char s[])
    {
        int sum=0;
        int len=strlen(s);
        for(int i=0;i<len;i++){
            if(s[i]=='G') continue;
            sum=sum*10+s[i]-'0';
        }
        if(s[0]=='G') return sum+n;
        return sum;
    }
    
    void Dijkstra(int v)
    {
        fill(vis,vis+N,false);
        fill(dis,dis+N,inf);
        for(int i=1;i<=n+m;i++){
            dis[i]=mp[v][i];
        }
        dis[v]=0;
        for(int i=0;i<n+m;i++){
            int u=-1;
            int minn=inf;
            for(int j=1;j<=n+m;j++){
                if(!vis[j]&&minn>dis[j]){
                    u=j;
                    minn=dis[j];
                }
            }
            vis[u]=true;
            for(int j=1;j<=n+m;j++){
                if(!vis[j]&&dis[j]>mp[u][j]+dis[u]){
                    dis[j]=mp[u][j]+dis[u];
                }
            }
        }
    }
    int main()
    {
        scanf("%d %d %d %d",&n,&m,&k,&Ds);
        fill(mp[0],mp[0]+N*N,inf);
        for(int i=0;i<k;i++){
            char s1[5],s2[5];
            int num;
            scanf("%s %s %d",s1,s2,&num);
            int a=toint(s1);
            int b=toint(s2);
            mp[a][b]=mp[b][a]=num;
        }
        int id=-1;
        double maxDis=-1;
        double minAvg=inf;
        for(int i=n+1;i<=n+m;i++){
            Dijkstra(i);
            double avg=0;
            double Min=inf;
            bool flag=false;
            for(int j=1;j<=n;j++){
                if(dis[j]>Ds){
                    flag=true;
                    break;
                }
                if(Min>dis[j]){
                    Min=dis[j];
                }
                avg+=1.0*dis[j]/n;
            }
            if(flag) continue;
            if(maxDis<Min){
                maxDis=Min;
                id=i;
                minAvg=avg;
            }
            else if(maxDis==Min&&minAvg>avg){
                id=i;
                minAvg=avg;
            }
    
        }
        if(id==-1) printf("No Solution
    ");
        else{
            printf("G%d
    ",id-n);
            printf("%.1f %.1f
    ",maxDis,minAvg);
        }
        return 0;
    }
  • 相关阅读:
    tomcat8.5配置redis实现session共享(tomcat-redis-session-manager-master)
    HDU4292(KB11-H 最大流)
    HDU4280(KB11-G 最大流)
    POJ1149(最大流)
    POJ3281(KB11-B 最大流)
    POJ3436(KB11-A 最大流)
    Codeforces841B
    Codeforces841A
    HDU2255(KB10-K 二分图最大权匹配)
    HDU1281(KB10-D 二分图最大匹配)
  • 原文地址:https://www.cnblogs.com/chenchen-12/p/10129275.html
Copyright © 2011-2022 走看看