• <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>
            posts - 43,  comments - 9,  trackbacks - 0

            最近做了兩道floyd變種的題目,又加深了對floyd原理的理解.

            第2題: tju 3214 Find the Path
            http://acm.tju.edu.cn/toj/showp3214.html

            題目大意是給一個無向圖,每個結點有個點權c[p]
            對于查詢的點對i,j和權k,求在中間節點(不包含端點i,j)權值不大于k的限制下,i,j間最短路徑.
            由于查詢次數多,因此一次查詢復雜度需要在O(logn)以內.考慮計算出所有點對在所有限制條件下的最短路,O(1)查詢.
            限制條件不作用于端點i,j,正好可以用floyd解決.因為floyd正是不斷向中間點集中加入點.只要限制一下這些被加入點的條件,就可以解決這題了.
            初步歸納,對于查詢i,j,k,應該輸出將所有c[p]<=k的點加入后的floyd[i,j]
            對于限制k,點集的情況是:加了權最小的m個(0<=m<=N),這些點的權都不超過k
            因此將點按權值升序排列.dist[k][i][j]表示:前k個點被加入后,i,j間的最短路.

            代碼如下:
             

             1#include <iostream>
             2using namespace std;
             3int T,N,M,Q,pc[210];
             4int C[210],dist[210][210][210]; 
             5bool mycmp(int a, int b){
             6    return (C[a]<C[b]);
             7}

             8int main(){
             9    int i,j,k,p,a,b,c;
            10    scanf("%d",&T);
            11    while(T--){
            12        memset(dist,0xff,sizeof(dist));
            13        scanf("%d%d",&N,&M);
            14        C[pc[0]=0]=-1;
            15        for(i=1;i<=N;i++){
            16            scanf("%d",&C[i]);
            17            pc[i]=i;
            18        }

            19        sort(pc,pc+N+1,mycmp);
            20        for(i=1; i<=M; i++){
            21            scanf("%d%d%d",&a,&b,&c);
            22            dist[0][a+1][b+1]=c;
            23            dist[0][b+1][a+1]=c;
            24        }

            25        //floyd
            26        for(k=1; k<=N; k++){
            27            p=pc[k];
            28            for(i=1; i<=N; i++){
            29                for(j=1; j<=N; j++){
            30                    if(dist[k][i][j]<0)
            31                        dist[k][i][j]=dist[k-1][i][j];
            32                    else if(dist[k-1][i][j]>=0)
            33                        dist[k][i][j]=min(dist[k][i][j],dist[k-1][i][j]);
            34                        
            35                    if(i!=&& dist[k-1][i][p]>=0 && dist[k-1][p][j]>=0){
            36                        if(dist[k][i][j]<0)
            37                            dist[k][i][j]=dist[k-1][i][p]+dist[k-1][p][j];
            38                        else
            39                            dist[k][i][j]=min(dist[k][i][j], dist[k-1][i][p]+dist[k-1][p][j]);
            40                    }

            41                    //printf("%d,%d,%d(%d) ",k,i,j,dist[k][i][j]);
            42                }

            43            }
                    
            44        }

            45        //query
            46        scanf("%d",&Q);
            47        while(Q--){
            48            scanf("%d%d%d",&a,&b,&c);
            49            //順序查找
            50            for(i=0; i<=&& C[pc[i]]<=c; i++);
            51            printf("%d\n",dist[i-1][a+1][b+1]);
            52        }

            53        printf("\n");
            54    }

            55    return 0;
            56}

            57
            posted on 2009-03-31 14:39 wolf5x 閱讀(242) 評論(0)  編輯 收藏 引用 所屬分類: acm_icpcalgorithm
            <2009年9月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            "Do not spend all your time on training or studying - this way you will probably become very exhausted and unwilling to compete more. Whatever you do - have fun. Once you find programming is no fun anymore – drop it. Play soccer, find a girlfriend, study something not related to programming, just live a life - programming contests are only programming contests, and nothing more. Don't let them become your life - for your life is much more interesting and colorful." -- Petr

            留言簿(3)

            隨筆分類(59)

            隨筆檔案(43)

            cows

            搜索

            •  

            最新評論

            評論排行榜

            午夜不卡888久久| 精品久久久无码人妻中文字幕| 无码AV波多野结衣久久| 久久久久AV综合网成人| 日韩人妻无码精品久久久不卡| 久久国产欧美日韩精品| 亚洲狠狠久久综合一区77777| 婷婷久久综合九色综合绿巨人| 久久天天躁夜夜躁狠狠| 久久精品水蜜桃av综合天堂 | 怡红院日本一道日本久久| 国产日产久久高清欧美一区| 久久这里只有精品久久| 久久亚洲电影| 久久精品国产亚洲AV无码麻豆| 久久久国产精品| 久久99国内精品自在现线| 武侠古典久久婷婷狼人伊人| 亚洲国产精品无码成人片久久| 成人精品一区二区久久| 蜜臀av性久久久久蜜臀aⅴ | 久久久无码精品亚洲日韩蜜臀浪潮 | 久久精品国产亚洲AV香蕉| 国产精品99久久久久久董美香| 亚洲色大成网站WWW久久九九| 色婷婷噜噜久久国产精品12p | 国产一级持黄大片99久久| 无码国内精品久久综合88| 国产精自产拍久久久久久蜜| 久久99精品国产自在现线小黄鸭 | 久久夜色精品国产亚洲| 久久精品国产亚洲AV无码偷窥| 亚洲国产一成人久久精品| 色综合久久夜色精品国产| 久久天天日天天操综合伊人av| 久久久久国产精品嫩草影院| 国产精品成人久久久久久久| 国产福利电影一区二区三区久久久久成人精品综合 | 66精品综合久久久久久久| 亚洲精品乱码久久久久久| 久久午夜无码鲁丝片秋霞 |