zoukankan      html  css  js  c++  java
  • HDU4522

    http://acm.hdu.edu.cn/showproblem.php?pid=4522

    好久没写了

    来写一篇吧

    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    
    int q, n, t, d1, d2, a, b;
    char s[1010][10000+10];
    int k[1010];
    int g[210][210];
    int gg[210][210];
    const int inf = 99999999;
    void make(){
        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= n; j ++)
                g[i][j] = inf;
        for(int i = 0; i < t; i ++){
            /*
            int start = s[i][0] - 48;
            for(int j = 2; s[i][j]; j += 2){
                int end = s[i][j] - 48;
                g[start][end] = k[i];
                start = end;
            }
            */
            int st = 0, ed;
            int f = 0, sum = 0;
            for(int j = 0; s[i][j]; j ++){
                if(s[i][j] >= 48 && s[i][j] <= '9'){
                    sum = sum * 10 + s[i][j] - 48;
                }else if(s[i][j] == '+'){
                    if(f == 0){
                        g[st][sum] = k[i];
                        st = sum;
                        sum = 0;
                        f = 1;
                    }else{
                        ed = sum;
                        sum = 0;
                        g[st][ed] = k[i];
                        st = ed;
                        f = 0;
                    }
                }
                //g[st][sum]
            }
            g[st][sum] = k[i];
        }
    }
    
    int dist[210];
    int vis[210];
    int dijk(int flag){
        //for(int i = 1; i )
        if(flag){
            for(int i = 1; i <= n; i ++)
                for(int j = 1; j <= n; j ++){
                    gg[i][j] = g[i][j];
                    if(g[i][j] == 1)
                        gg[i][j] = d2;
                    else if(g[i][j] == 0)
                        gg[i][j] = inf;
                }
        }else{
            for(int i = 1; i <= n; i ++)
                for(int j = 1; j <= n; j ++){
                    gg[i][j] = g[i][j];
                    if(g[i][j] == 1 || g[i][j] == 0)
                        gg[i][j] = d1;
                }
        }
        for(int i = 1; i <= n; i ++){
            dist[i] = gg[a][i];
            vis[i] = 0;
        }
        vis[a] = 1;
        dist[a] = 0;
        for(int i = 0; i < n - 1; i ++){
            int min_num = inf, v = -1;
            for(int j = 1; j <= n; j ++){
                if(!vis[j] && dist[j] < min_num){
                    v = j;
                    min_num = dist[j];
                }
            }
            //printf("%d++++\n", v);
            if(v == -1) break;
            vis[v] = 1;
            for(int j = 1; j <= n; j ++){
                if(!vis[j] && gg[v][j] < inf && dist[v] + gg[v][j] < dist[j]){
                    dist[j] = dist[v] + gg[v][j];
                }
            }
        }
        if(dist[b] == inf) return -1;
        return dist[b];
    }
    int main(){
        //while(~scanf("%d", &q))
            scanf("%d", &q);
        {
            while(q--){
                scanf("%d%d", &n, &t);
                for(int i = 0; i < t; i ++)
                    scanf("%s%d", s[i], k+i);
                scanf("%d%d", &d1, &d2);
                scanf("%d%d", &a, &b);
                make();
                int ans1 = dijk(1);
                int ans2 = dijk(0);
                if(ans1 == -1 && ans2 == -1){
                    printf("-1\n");
                    continue;
                }
                if(ans1 == -1){
                    printf("%d\n", ans2);
                    continue;
                }
                if(ans2 == -1){
                    printf("%d\n", ans1);
                    continue;
                }
                printf("%d\n", ans1 < ans2 ? ans1 : ans2);
            }
        }
        return 0;
    }
  • 相关阅读:
    cocos2dx遇到的一些坑
    cocos2dx场景切换的坑
    整合quickx到普通cocos2dx
    Hadoop、spark
    Redis高级特性及应用场景
    wpf相关好资源
    MVVM模式的几个开源框架
    ASP.NET的IIS映射
    NET 开发者必备的工具箱
    C#开源汇总
  • 原文地址:https://www.cnblogs.com/louzhang/p/2984102.html
Copyright © 2011-2022 走看看