• Einbahnstrasse HDU2923


    基础2923题   

    处理输入很麻烦

    有可能一个城市有多辆破车要拖   应该严谨一点的 考虑所有情况

    #include<bits/stdc++.h>
    using namespace std;
    
    int m1[1005][1005];
    int vis[1005];int dis[1005];
    #define INF 99999
    int n,e,cas;
    
    int a1[1000];int a2[1000];
    
    void dijkstra(int v0)
    {
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)dis[i]=m1[v0][i];
       //  for(int i=1;i<=n;i++)printf("%d ",dis[i]);cout<<endl;
        vis[v0]=1;
        for(int i=0;i<n-1;i++)
        {
            int minn=INF,u=v0;
            for(int j=1;j<=n;j++)
            {
                if(vis[j]==0&&dis[j]<minn)
                {
                    u=j;minn=dis[j];
    
                }
    
    
            }
            vis[u]=1;
            for(int j=1;j<=n;j++)
            {
                if(vis[j]==0&&dis[u]+m1[u][j]<dis[j])
                {
                    dis[j]=dis[u]+m1[u][j];
                }
    
            }
    
        }
    
    
    
    }
    int a[1000];
    
    
    
    int main()
    {
       int c1,cas;map<string,int>ma;
       int cas1=0;
       while(scanf("%d%d%d",&n,&c1,&cas)==3&&(n+c1+cas))
       {   ma.clear();
          memset(a,0,sizeof(a));
           for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
           {
               if(i==j)m1[i][j]=0;
               else m1[i][j]=INF;
    
           }
           int c=0;string s;cin>>s;
           ma[s]=n;
    
           for(int i=1;i<=c1;i++)
           {
               cin>>s;
               if(!ma[s])ma[s]=++c;
               a[i]=ma[s];
           }
          // printf("pl10
    ");
           string s1,s2,s3;
           while(cas--)
           {
               cin>>s1>>s2>>s3;
               int val=0;
    
               //cout<<s1<<endl;
              // cout<<s2<<endl;
             //  cout<<s3<<endl;
               val=s2[2]-'0';
               int i=3;
               while(isdigit(s2[i])){ val=val*10+s2[i]-'0';   i++;}
           //    printf("val=%d
    ",val);
               if(!ma[s1])ma[s1]=++c;
               if(!ma[s3])ma[s3]=++c;
               if(s2[0]=='<'&&m1[ ma[s3] ][ ma[s1] ]>val)m1[ ma[s3] ][ ma[s1] ]=val;
               if(s2[ s2.size()-1 ]=='>'&&m1[ ma[s1] ][ ma[s3] ]>val)m1[ ma[s1] ][ ma[s3] ]=val;
    
    
    
           }
    
          // for(int i=1;i<=n;i++)
          // {
          //     for(int j=1;j<=n;j++)
          //      printf("%d ",m1[i][j]);
          //     cout<<endl;
         //  }
    
    
    
           int sum=0;
          // for(int i=1;i<=c1;i++)printf("%d ",a[i]);cout<<endl;
           for(int i=1;i<=c1;i++)
           {
    
               dijkstra( a[i] );sum+=dis[n];
    
           }
           //printf("%d
    ",sum);
           dijkstra(n);
           for(int i=1;i<=c1;i++)sum+=dis[ a[i] ];
    
           printf("%d. %d
    ",++cas1,sum);
    
    
    
       }
    
    
    
    
    }
    View Code
  • 相关阅读:
    Vue
    多线程
    多进程进阶
    CentOS7中安装MySQL
    socket
    回顾
    Hibernate学习一:Hebinate入门以及一些小问题
    struts2学习二:Tomcat的部署目录和访问路径问题
    struts2学习一:hello struts2及struts2环境配置中遇到的问题
    Scanner几个问题与正则简介
  • 原文地址:https://www.cnblogs.com/bxd123/p/10327545.html
Copyright © 2020-2023  润新知