• <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 閱讀(253) 評論(0)  編輯 收藏 引用 所屬分類: acm_icpcalgorithm
            <2011年8月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            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

            搜索

            •  

            最新評論

            評論排行榜

            国产午夜久久影院| 色狠狠久久AV五月综合| 久久国产精品偷99| 久久久人妻精品无码一区| 久久久久精品国产亚洲AV无码| 国产成人久久精品一区二区三区| 久久被窝电影亚洲爽爽爽| 久久综合九色综合久99| 久久综合香蕉国产蜜臀AV| 国产精品永久久久久久久久久| 久久久久久久久久久久久久 | 亚洲色欲久久久综合网| 成人精品一区二区久久久| 亚洲国产精品无码久久SM| 久久久99精品成人片中文字幕 | 国产午夜电影久久| 亚洲精品无码久久久久sm| 开心久久婷婷综合中文字幕| 久久精品a亚洲国产v高清不卡| 欧美一区二区久久精品| 日韩精品国产自在久久现线拍| 国产成人久久AV免费| 亚洲综合精品香蕉久久网| 久久久久av无码免费网| 久久久中文字幕日本| 久久亚洲高清观看| 国产精品久久久久久搜索| 久久久久亚洲av无码专区导航| 一级女性全黄久久生活片免费 | 久久精品18| 国产高潮久久免费观看| 亚洲午夜精品久久久久久人妖| 99久久综合狠狠综合久久止| 久久男人Av资源网站无码软件| 狠狠色综合网站久久久久久久高清| 久久乐国产综合亚洲精品| 婷婷久久五月天| 日韩精品久久久久久免费| 久久久久99精品成人片欧美| 无码久久精品国产亚洲Av影片| 久久久精品2019免费观看|