• <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>

            pku 3268

            2009年7月26日

            題目鏈接:PKU 3268 Silver Cow Party
             
            分類:一道巧妙的Dijkastra

            題目分析與算法
                      這道題目最容易想的就是Floyd,但是其n3的復(fù)雜度顯然會超時,我當(dāng)時拿到這題的時候,想都沒想,直接以x為源點一次Dijkastra,然后在一遍循環(huán)分別以除x外的其他點為起始點做Dijkastra,然后相加,結(jié)果自然使TLE了,復(fù)雜度太高了,做了太多遍的Dijkastra,后來看了討論,發(fā)現(xiàn)原來兩遍Dijkastra就行了,第一次還是以x為開始的點做一遍,記錄從x出發(fā)到其他所有點的最短路徑長度,然后將每條有向路徑反過來(即是將矩陣轉(zhuǎn)置一下)還是以x為起點再做一遍Dijkastra即可了,至于為什么這樣子,我們可以這樣想,第一次Dijkastra我門已經(jīng)計算出來從x到其他的點的最短路徑了,現(xiàn)在我們要算的就是其他除x外的每個點到x的最短路徑,對于每個點如果其到x的最短路徑為path,那么顯然我們將所有路徑置反后從x開始沿剛的path返回的路徑的長度顯然和path是一樣的,只是方向不同了,那么當(dāng)我們將所有路徑置反了后再調(diào)用一遍以x為起點的Dijkastra,求出的dis[i],正好就是第i個點到x的最短路徑,再從所有兩次相加的和中取最大的輸出即可。


            Code:
             
             1
            #include<stdio.h>
             2#define len 1005
             3#define max 1000000000
             4
             5int map[len][len],dis[len],cost[len],n,m,x;
             6
             7void init()
             8{
             9    int i,j;
            10    for(i=1;i<=n;i++)
            11        for(j=1;j<=n;j++)
            12        {
            13            if(i==j)map[i][j]=0;
            14            else map[i][j]=max;
            15        }

            16}

            17void dij(int v0)
            18{
            19    int i,j,u,visit[len]={0};
            20    for(i=1;i<=n;i++)dis[i]=map[v0][i];
            21    visit[v0]=1;
            22    for(i=1;i<n;i++)
            23    {
            24        int min=max;
            25        for(j=1;j<=n;j++)
            26            if(!visit[j]&&dis[j]<min)
            27            {
            28                u=j;
            29                min=dis[j];
            30            }

            31        if(min==max)return ;    
            32        visit[u]=1;
            33        for(j=1;j<=n;j++)
            34            if(!visit[j]&&map[u][j]<max&&dis[u]+map[u][j]<dis[j])
            35                dis[j]=dis[u]+map[u][j];
            36    }

            37}

            38int main()
            39{
            40    int i,j;
            41    while(scanf("%d%d%d",&n,&m,&x)!=EOF)
            42    {
            43        init();
            44        for(i=1;i<=m;i++)
            45        {
            46            int a,b,t;
            47            scanf("%d%d%d",&a,&b,&t);
            48            if(t<map[a][b])map[a][b]=t;
            49        }

            50        dij(x);
            51        for(i=1;i<=n;i++)
            52            if(i!=x)cost[i]=dis[i];
            53        
            54        for(i=1;i<=n;i++)       //將有向路徑取反,也就是矩陣轉(zhuǎn)置
            55            for(j=i+1;j<=n;j++)
            56            {
            57                int tt=map[i][j];
            58                map[i][j]=map[j][i];
            59                map[j][i]=tt;
            60            }

            61        dij(x);
            62        for(i=1;i<=n;i++)
            63            if(i!=x)cost[i]+=dis[i];
            64        
            65        int res=-1;
            66        for(i=1;i<=n;i++)
            67            if(i!=x&&cost[i]>res)res=cost[i];
            68        printf("%d\n",res);
            69    }

            70    return 0;
            71}

            72
            73

            posted on 2009-07-26 20:27 蝸牛也Coding 閱讀(327) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2011年7月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(8)

            隨筆檔案(78)

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            热久久这里只有精品| 91久久精品无码一区二区毛片| 一本久久a久久精品综合香蕉| 一级做a爰片久久毛片看看| 久久人人爽人人精品视频| 热久久国产欧美一区二区精品 | 久久久精品人妻一区二区三区四| 国产A三级久久精品| 精品久久久久久中文字幕| 久久99精品久久久久久水蜜桃| 伊人色综合久久天天网| 伊人丁香狠狠色综合久久| 日本WV一本一道久久香蕉| 国产69精品久久久久777| 欧美久久综合九色综合| 国产精品99精品久久免费| 久久夜色撩人精品国产| 久久精品www| 色欲综合久久中文字幕网| 久久亚洲电影| 91久久成人免费| 99国产欧美久久久精品蜜芽| 久久乐国产综合亚洲精品| 久久国产精品免费| 91麻精品国产91久久久久| 亚洲精品美女久久777777| 国产精品99久久久久久宅男小说| 91亚洲国产成人久久精品| 久久99国产精品久久99果冻传媒 | 成人久久久观看免费毛片| 久久久久人妻一区二区三区vr| 久久亚洲国产最新网站| 亚洲欧美日韩精品久久亚洲区 | 成人国内精品久久久久一区| 日韩精品无码久久久久久| 久久人人爽人人爽人人片AV麻烦| 久久综合九色欧美综合狠狠| 久久国产成人午夜AV影院| 久久综合九色欧美综合狠狠| 伊人久久五月天| 色综合久久久久综合体桃花网|