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

            Toj 2248 Channel Design 解題報(bào)告

            【題意分析】

            給一個(gè)有向圖求最小生成樹。由于是有向圖所以prim和kruskal是不能解決的。這里涉及到一個(gè)求有向圖最小生成樹的算法叫做最小樹形圖。

            【算法分析】

            1.把這個(gè)圖消去自環(huán)

            2.給除了根以外的每個(gè)點(diǎn)找到一個(gè)最小的入邊

            3.如果這個(gè)最小入邊集中不含有向環(huán)的話我們就可以證明這個(gè)集合就是該圖的最小生成樹了。

            4.如果存在有向環(huán)的話,我們就將這個(gè)有向環(huán)整體看做一個(gè)頂點(diǎn),同時(shí)改變圖中邊的權(quán)值。

            5.現(xiàn)在假設(shè)u在該環(huán)上,這個(gè)環(huán)中指向u的邊權(quán)是in[u],那么對于每條從u出發(fā)的邊(u,i,w),在新圖中連接(new,i,w)的邊。

            6.對于每條進(jìn)入u的邊(i,u,w),在新圖中建立邊(i,new,w-in[u])的邊。

            7.對于這個(gè)算法正確性的證明,可以參考目錄下的在網(wǎng)絡(luò)中尋找最小樹形圖的簡易算法.pdf

              1#include <stdio.h>
              2#include <string.h>
              3using namespace std;
              4 
              5const unsigned int maxn=128,NOEDGE=-1;
              6unsigned int G[maxn][maxn];
              7int N,M;
              8int res; 
              9unsigned int update(unsigned int o,unsigned int x){
             10    if(o>x)return x;
             11        return o;
             12}

             13bool vis[maxn]; 
             14void dfs(int v){
             15    vis[v]=true;
             16    for(int i=2;i<=N;++i)
             17        if((!vis[i])&&G[v][i]!=NOEDGE)
             18            dfs(i); 
             19}

             20bool possible(){
             21    memset(vis,0,sizeof(vis));
             22    dfs(1);
             23    for(int i=2;i<=N;++i)
             24        if(!vis[i])
             25            return false;
             26    return true;
             27}

             28int pre[maxn];
             29bool del[maxn];
             30void solve(){
             31    int num=N;
             32    memset(del,0,sizeof(del));
             33    for(;;){
             34        int i;
             35        for(i=2;i<=N;++i){
             36            if(del[i])continue;
             37            pre[i]=i;
             38            G[i][i]=NOEDGE;
             39            for(int j=1;j<=N;++j){
             40                if(del[j])continue;
             41                if(G[j][i]<G[pre[i]][i])
             42                    pre[i]=j;
             43            }

             44        }

             45        for(i=2;i<=N;++i){
             46            if(del[i])continue;
             47            int j=i;
             48            memset(vis,0,sizeof(vis));
             49            while(!vis[j]&&j!=1){
             50                vis[j]=true;
             51                j=pre[j];
             52            }

             53            if(j==1)continue;
             54            i=j;
             55            res+=G[pre[i]][i];
             56            for(j=pre[i];j!=i;j=pre[j]){
             57                res+=G[pre[j]][j];
             58                del[j]=true;    
             59            }

             60            for(j=1;j<=N;++j){
             61                if(del[j])continue;
             62                if(G[j][i]!=NOEDGE)
             63                    G[j][i]-=G[pre[i]][i];
             64            }

             65            for(j=pre[i];j!=i;j=pre[j]){
             66                for(int k=1;k<=N;++k){
             67                    if(del[k])continue;
             68                    G[i][k]=update(G[i][k],G[j][k]);
             69                    if(G[k][j]!=NOEDGE)
             70                        G[k][i]=update(G[k][i],G[k][j]-G[pre[j]][j]);
             71                }

             72            }

             73            for(j=pre[i];j!=i;j=pre[j]){
             74                del[j]=true;
             75            }

             76            break;
             77        }

             78        if(i>N){
             79            for(int i=2;i<=N;++i){
             80                if(del[i])continue;
             81                res+=G[pre[i]][i];
             82            }

             83            break;
             84        }

             85    }

             86}

             87int main(){
             88    for(;;){
             89        scanf("%d%d",&N,&M);
             90        if(N==0)break;
             91        memset(G,NOEDGE,sizeof(G));
             92        for(int i=0;i<M;++i){
             93            unsigned int a,b,c;
             94            scanf("%u%u%u",&a,&b,&c);
             95            G[a][b]=c;
             96        }

             97        if(!possible()){
             98            puts("impossible"); 
             99        }

            100        else{
            101            res=0
            102            solve();
            103            printf("%d\n",res);
            104        }

            105    }

            106}

            posted on 2008-07-15 12:36 gong 閱讀(188) 評論(0)  編輯 收藏 引用


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


            <2008年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(6)

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            色综合久久天天综合| 久久久久久精品免费免费自慰| 久久美女人爽女人爽| 久久久久亚洲AV成人网人人网站| 噜噜噜色噜噜噜久久| 99国产欧美久久久精品蜜芽| 四虎国产精品成人免费久久| 午夜久久久久久禁播电影| 久久伊人五月天论坛| 精品999久久久久久中文字幕| 亚洲国产精品一区二区三区久久| 国产91久久精品一区二区| 久久夜色精品国产噜噜亚洲a| A级毛片无码久久精品免费| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 久久91精品国产91久久小草| 亚洲国产高清精品线久久 | 中文字幕亚洲综合久久2| 亚洲国产精品无码久久久蜜芽| 国内精品久久久久久麻豆| 久久久一本精品99久久精品88 | 久久精品国产免费| 久久久国产打桩机| 日韩中文久久| 无夜精品久久久久久| 欧美久久久久久午夜精品| 欧美亚洲国产精品久久蜜芽| 国内精品久久久久影院日本| 777午夜精品久久av蜜臀| 久久青青色综合| 色偷偷88欧美精品久久久 | 久久久无码精品亚洲日韩按摩 | 久久国产精品免费一区| 99久久久精品| 日韩人妻无码一区二区三区久久 | 久久人人爽人人爽AV片| 国产日韩久久久精品影院首页| 女人香蕉久久**毛片精品| 久久精品国产99国产精偷 | 伊人色综合久久天天人守人婷| 久久国产成人精品国产成人亚洲|