• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 97, 文章 - 22, 評論 - 81, 引用 - 0
            數據加載中……

            Hdu 2363 Cycling(最短路)

            每個點有一個高度,從1到n使得最大高度和最小高度的差值最小,如果有相同高度,取路徑最短的。以前比賽的時候沒有去看,以為是很難的題,后來聽說要用二分,一直拖著,今天早上起來,讀了一下題目發現根本不用二分,點只有100個,可以對每個點的高度進行上下界枚舉求最短路保存最優值。這樣的話最壞復雜度是O(n^4),這里n == 100,而且測試樣例有100組,但是這個題目的限制條件決定了有很多地方可以剪枝。首先,可以先將每個點的高度進行升序排列,如果1或n不在所枚舉的高度上下界中,直接跳過。再者,如果當前枚舉的高度差大于先前算出來的最優值,直接跳過不算,最強的是:如果當前能夠算出解,那么上界再大亦可算出,直接break;

            代碼如下:
            #include <iostream>
            #include 
            <algorithm>
            using namespace std;

            int t;
            int alti[101];
            int n, m;
            int d[101], s[101];
            int map[101][101];
            int sor[101];

            int Dijkstra(int Min, int Max) {

                
            int i;

                
            for(i = 1; i <= n; i++{
                    
            if(alti[i] > Max || alti[i] < Min) {
                        d[i] 
            = 100000000;
                        s[i] 
            = 0;
                    }
            else {
                        d[i] 
            = map[1][i];
                        s[i] 
            = 0;
                    }

                }

                d[
            1= 0;
                s[
            1= 1;
                
                
            while(1{
                    
            int Mina = 100000000, u = -1;
                    
            for(i = 1; i <= n; i++{
                        
            if(alti[i] > Max || alti[i] < Min) 
                            
            continue;
                        
            if(!s[i] && d[i] < Mina) {
                            Mina 
            = d[i];
                            u 
            = i;
                        }

                    }

                    
            if(u == n)
                        
            return d[u];
                    
            if(u == -1)
                        
            return -1;
                    s[u] 
            = 1;
                    
            for(i = 1; i <= n; i++{
                        
            if(alti[i] > Max || alti[i] < Min) 
                            
            continue;
                        
            if(!s[i] && d[u] + map[u][i] < d[i]) {
                            d[i] 
            = d[u] + map[u][i];
                        }

                    }

                }

            }


            int main() {

                
            int i, j;
                scanf(
            "%d"&t);
                
            int a, b, c;
                
            while(t--{
                    scanf(
            "%d %d"&n, &m);

                    
            for(i = 1; i <= n; i++{
                        
            for(j = 1; j <= n; j++{
                            map[i][j] 
            = 100000000;
                        }

                    }

                    
            for(i = 1; i <= n; i++{
                        scanf(
            "%d"&alti[i]);
                        sor[i
            -1= alti[i];
                    }

                    sort(sor, sor 
            + n);

                    
            while(m--){
                        scanf(
            "%d %d %d"&a, &b, &c);
                        
            if(c < map[a][b]) {
                            map[a][b] 
            = map[b][a] = c;
                        }

                    }


                    
            int Min = 2000000000, path;

                    
            for(i = 0; i < n; i++{
                        
            for(j = i+1; j < n; j++{

                            
            if(alti[n] > sor[j] || alti[n] < sor[i])
                                
            continue;
                            
            if(alti[1> sor[j] || alti[1< sor[i])
                                
            continue;

                            
            if(sor[j] - sor[i] > Min)
                                
            break;

                            
            int yu;
                            yu 
            = Dijkstra(sor[i], sor[j]);
                            
            //printf("%d %d %d\n", sor[i], sor[j], yu);

                            
            if(yu + 1 && sor[j] - sor[i] == Min) {
                                
            if(yu < path)
                                    path 
            = yu;
                            }


                            
            if(yu + 1 && sor[j] - sor[i] < Min) {
                                Min 
            = sor[j] - sor[i];
                                path 
            = yu;
                            }


                            
            if(yu != -1)
                                
            break;
                        }

                    }

                    
            if(n == 1)
                        printf(
            "0 0\n");
                    
            else
                        printf(
            "%d %d\n",  Min, path);
                }

            }

            posted on 2009-03-10 09:14 英雄哪里出來 閱讀(519) 評論(1)  編輯 收藏 引用 所屬分類: ACM

            評論

            # re: Hdu 2363 Cycling(最短路)  回復  更多評論   

            你好我做這題的時候是二分高度差的,然后根據這個高度差做一遍dijkstra的,但是一直wa。這種寫法有什么問題么?
            2009-10-04 14:20 | rotten
            四虎国产精品免费久久5151| 午夜不卡久久精品无码免费| 麻豆精品久久精品色综合| 久久久久四虎国产精品| 久久国产精品一区| 99久久精品免费看国产一区二区三区| 久久久久久久免费视频| 久久久女人与动物群交毛片| 免费观看久久精彩视频| 伊人久久大香线蕉综合5g| 国色天香久久久久久久小说| 久久免费线看线看| 久久人做人爽一区二区三区| 国产日产久久高清欧美一区| 亚洲国产成人精品91久久久| 99久久er这里只有精品18| 久久久久久极精品久久久| 亚洲AV无码成人网站久久精品大| 国产精品久久精品| 亚洲人成伊人成综合网久久久| 热久久国产精品| 色综合久久久久久久久五月| 久久久久国产| 久久久青草青青亚洲国产免观| 久久九九兔免费精品6| 国产成人综合久久精品尤物| 久久精品国产亚洲AV无码娇色| 一本久久a久久精品综合香蕉| 久久精品国产亚洲一区二区| 久久婷婷色香五月综合激情| 国产成人精品久久| 欧美亚洲国产精品久久蜜芽| 99久久这里只有精品| 欧美一区二区三区久久综| 99精品久久精品一区二区| 日本五月天婷久久网站| 国产免费久久精品99re丫y| 性做久久久久久久久| 亚洲欧洲精品成人久久奇米网| 久久男人中文字幕资源站| 久久久精品人妻无码专区不卡|