青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 43,  comments - 9,  trackbacks - 0

求所謂的 optimal path:
對某個頂點,只能沿著它所有出邊中weight最小的那些路走;
從起點到終點的總weight最小;
如果有weight相同的,取總length最短的.
可能有負環,自環,平行邊.

先將不符合要求的邊刪掉.
接著,關鍵在于如何判斷有效負環,即該負環處在起點到終點的路上.
實際上,只用保留原圖中從起點能到達,并且能到達終點的頂點.
如果用標準bellman-ford,需要2次DFS:從起點開始沿邊的方向DFS,標記能到達的點;從終點開始沿邊的逆向DFS,標記點.
2次都被標記到的點,才是實際有效點.將剩余點刪掉.
如果用SPFA,只用執行逆向DFS,因為SPFA本身的擴展是從起點開始沿正向搜索擴展的.
可以建個新圖,回避刪邊刪點的麻煩.

無法到達,輸出VOID:之前從終點開始的DFS無法到達起點
weight無下界,輸出UNBOUND:新圖中存在關于weight的負環
要注意松弛操作weight的優先級最高...我居然犯這么低級的錯誤.
最后若有界解存在,輸出wi[B]和di[B]

ps. 如果這題改成: 求length最短的路徑中,weight最小的路徑,就不一樣了,得判斷負環是不是在起點到終點的必經之路上,如果不是,還要不斷走負環,使得在lenght最短的前提下,weight取盡量大.


  1#include <iostream>
  2using namespace std;
  3
  4const int MAXQ = 65536;
  5const int INF = -0x7fffffff;
  6
  7struct EDGE{
  8    int v,e,w,l;
  9}
edg[5100*8];
 10int se, gt[1100],gg[1100]; //原圖,新圖 
 11int cn[1100], re[1100], di[1100],wi[1100]; //頂點入列次數, 頂點rewarding邊權, dist, weight 
 12bool ok[1100],inq[1100]; //能否到達終點, 是否在隊列中 
 13int que[MAXQ],pq,sq;
 14int ansW,ansL;
 15int N,M,A,B;
 16
 17inline void addedge(int u, int v, int w, int l, int g[]){
 18    edg[se].v = v;
 19    edg[se].w = w;
 20    edg[se].l = l;
 21    edg[se].e = g[u];
 22    g[u] = se++;
 23}

 24
 25inline void skp(char c){
 26    while(getchar()!=c);
 27}

 28
 29bool input(){
 30    int i,j,k,u,v,wf,wb,l;
 31    se = 2;
 32    memset(gt, 0sizeof(gt));
 33    memset(gg, 0sizeof(gg));
 34    memset(re, 0x7fsizeof(re));
 35    if(scanf("%d%d",&N,&M)==EOF) return false;
 36    scanf("%d%d",&A,&B);
 37    for(i=0; i<M; i++){
 38        skp('('); scanf("%d",&u);
 39        skp(','); scanf("%d",&v);
 40        skp(','); scanf("%d",&wf);
 41        skp('['); scanf("%d",&l);
 42        skp(']'); scanf("%d",&wb);
 43        skp(')');
 44        addedge(u,v,wf,l,gt);
 45        addedge(v,u,wb,l,gt);
 46        re[u] = min(re[u], wf);
 47        re[v] = min(re[v], wb);
 48    }

 49    return true;
 50}

 51
 52void dfs(int r)//從B開始沿反向邊遍歷 
 53    int i,j,k;
 54    ok[r]=true;
 55    for(j=gt[r]; j>0; j=edg[j].e){
 56        if(ok[edg[j].v]==truecontinue;
 57        if(edg[j^1].w == re[edg[j].v])
 58            dfs(edg[j].v);
 59    }

 60}

 61
 62
 63bool spfa(){
 64    int i,j,k,u,v,w;
 65    bool flag;
 66    memset(cn, 0sizeof(cn)); //入列次數 
 67    for(i=0; i<N; i++){
 68        di[i] = wi[i] = INF;
 69    }

 70    memset(inq, falsesizeof(inq)); //是否在隊列中 
 71    pq = sq = 0;
 72    que[sq++= A;
 73    di[A] = 0; wi[A] = 0;
 74    while(pq!=sq){
 75        u = que[pq]; inq[u]=false;
 76        if(++pq == MAXQ) pq=0;
 77        for(j=gg[u]; j>0; j=edg[j].e){
 78            v = edg[j].v; flag = false//是否有松弛操作 
 79            if(wi[v] == INF || wi[v]>wi[u]+edg[j].w)//對weight,優先級最高 
 80                flag=true;
 81                wi[v] = wi[u]+edg[j].w;
 82                di[v] = di[u]+edg[j].l;
 83                if(inq[v]==false && ++cn[v]>N*2//判斷負環 
 84                    return false;
 85            }

 86            else if(wi[v]==wi[u]+edg[j].w){
 87                if(di[v] == INF || di[v]>di[u]+edg[j].l)//對length 
 88                    flag=true;
 89                    di[v] = di[u]+edg[j].l;
 90                }

 91            }

 92            if(inq[v]==false && flag==true){
 93                inq[v]=true;
 94                que[sq] = v;
 95                if(++sq == MAXQ) sq=0;
 96            }

 97        }

 98    }

 99    ansW = wi[B];
100    ansL = di[B];
101    return true;
102}

103
104
105void solve(){
106    int i,j,k;
107    
108    memset(ok,false,sizeof(ok));
109    dfs(B);
110    if(ok[A]==false){
111        puts("VOID"); return ;
112    }

113    for(i=0; i<N; i++)//建新圖 
114        if(ok[i]==falsecontinue;
115        for(j=gt[i]; j>0; j=edg[j].e){
116            if(edg[j].w == re[i] && ok[edg[j].v]==true){
117                addedge(i, edg[j].v, edg[j].w, edg[j].l, gg);
118                //printf("%d,%d(%d,%d) ",i,edg[j].v,edg[j].w,edg[j].l);
119            }

120        }

121    }

122    ansL = ansW = 0x7fffffff;
123    if(spfa()==false){
124        puts("UNBOUND"); return ;
125    }

126    printf("%d %d\n",ansW,ansL);
127}

128    
129
130int main(){
131    while(input()){
132        solve();
133    }

134    return 0;
135}
posted on 2009-05-06 11:17 wolf5x 閱讀(281) 評論(0)  編輯 收藏 引用 所屬分類: acm_icpcalgorithm
<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

"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

搜索

  •  

最新評論

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品女主播| 亚洲电影免费在线观看| 99国产精品久久| 欧美日韩一区二区三区免费| 午夜欧美大片免费观看| 久久久久久久综合| 一本色道久久综合狠狠躁篇的优点| 亚洲一区二区三区在线视频| 久久精品夜色噜噜亚洲a∨ | 久久视频一区二区| 欧美极品影院| 久久久久久久网| 欧美另类99xxxxx| 久久亚洲综合色| 欧美性大战久久久久久久| 美女国内精品自产拍在线播放| 欧美日韩另类在线| 毛片精品免费在线观看| 国产精品久久久91| 亚洲国产高清自拍| 国内揄拍国内精品久久| 一区二区欧美国产| 亚洲乱码国产乱码精品精98午夜| 午夜精品久久久久久久| 一本到12不卡视频在线dvd| 午夜影视日本亚洲欧洲精品| 亚洲深夜福利视频| 免费观看日韩av| 毛片av中文字幕一区二区| 国产亚洲精品福利| 亚洲一区二区三区激情| 中文av一区二区| 欧美另类极品videosbest最新版本| 久久天堂国产精品| 国产免费观看久久黄| 亚洲视频1区2区| 亚洲性线免费观看视频成熟| 欧美精品在线一区二区三区| 欧美成人资源| 一区二区三区在线免费观看 | 一本色道久久综合亚洲精品不卡 | 久久精品人人做人人爽| 欧美亚日韩国产aⅴ精品中极品| 亚洲韩日在线| 亚洲国产黄色| 久久夜色精品一区| 久久精品五月婷婷| 国产亚洲成av人片在线观看桃| 亚洲私拍自拍| 亚洲午夜免费视频| 欧美性大战久久久久| 中文精品视频一区二区在线观看| 在线一区亚洲| 欧美四级剧情无删版影片| 一区二区三区|亚洲午夜| 亚洲伊人伊色伊影伊综合网 | 亚洲精品系列| 一区二区三区欧美日韩| 欧美日韩国产区| 日韩视频免费| 亚洲欧美韩国| 国产视频一区在线| 久久久精品日韩| 欧美va天堂va视频va在线| 亚洲国产欧美不卡在线观看| 欧美韩日一区二区三区| 日韩视频在线一区二区三区| 亚洲午夜av在线| 国产精品手机视频| 欧美专区日韩视频| 欧美激情精品| 夜夜嗨网站十八久久| 亚洲图片欧洲图片日韩av| 性欧美videos另类喷潮| 国产日韩欧美在线一区| 久久免费黄色| 亚洲精品之草原avav久久| 亚洲一区二区免费视频| 国产午夜久久| 欧美电影打屁股sp| 一区二区三区蜜桃网| 久久精品国产v日韩v亚洲| 在线精品国精品国产尤物884a| 欧美国产在线观看| 亚洲一区二区三区精品在线观看| 麻豆91精品| 亚洲性视频网站| 在线免费观看日韩欧美| 欧美日韩国内自拍| 久久国产加勒比精品无码| 亚洲黄色在线视频| 久久精品九九| 一区二区三区 在线观看视| 国产日韩亚洲欧美| 欧美精品在欧美一区二区少妇| 午夜久久久久久| 亚洲精品乱码久久久久久| 久久国产精品亚洲va麻豆| 亚洲精品欧美在线| 国产日韩欧美在线| 欧美精品一区二区三区视频| 久久av红桃一区二区小说| 亚洲美女淫视频| 你懂的视频一区二区| 西西人体一区二区| 亚洲精品国产精品乱码不99| 国产一区二区三区成人欧美日韩在线观看| 欧美成人官网二区| 性做久久久久久免费观看欧美 | 亚洲高清在线观看一区| 国产精品夜夜夜一区二区三区尤| 欧美电影免费观看高清完整版| 午夜亚洲性色视频| 亚洲视频一起| 亚洲另类视频| 欧美www视频| 欧美专区日韩专区| 在线视频免费在线观看一区二区| 伊人夜夜躁av伊人久久| 国产女精品视频网站免费| 欧美日韩国产综合一区二区| 欧美成人一区二区| 久久视频这里只有精品| 欧美中文字幕久久| 亚洲欧美日韩国产| 在线亚洲一区二区| 亚洲欧洲中文日韩久久av乱码| 免费不卡视频| 久久综合狠狠综合久久综合88 | 欧美日韩一区二区欧美激情| 狂野欧美激情性xxxx| 久久国产一区二区| 久久av一区二区| 亚欧成人精品| 亚欧美中日韩视频| 香蕉乱码成人久久天堂爱免费| 亚洲已满18点击进入久久| 一区二区三区av| 一区二区三区高清视频在线观看| 亚洲美女区一区| 日韩午夜三级在线| 99国内精品| 在线视频日韩精品| 亚洲淫片在线视频| 欧美/亚洲一区| 美女久久一区| 欧美国产日韩二区| 亚洲三级影院| 一区二区精品| 亚洲一区视频在线| 亚洲欧美日韩一区二区三区在线| 亚洲综合激情| 欧美在线三区| 老巨人导航500精品| 欧美韩日视频| 国产精品成人免费| 国产人久久人人人人爽| 狠狠色伊人亚洲综合成人| 亚洲高清视频在线| 99日韩精品| 欧美影院精品一区| 麻豆精品视频在线观看视频| 亚洲国产精品久久91精品| 99热免费精品在线观看| 亚洲一区免费网站| 久久动漫亚洲| 欧美激情综合色综合啪啪| 国产精品成人一区二区| 国产亚洲欧美一区二区三区| 亚洲欧洲精品一区二区精品久久久| 一区二区欧美日韩视频| 欧美一区二区三区婷婷月色 | 国产一区久久久| 亚洲大胆女人| 亚洲午夜国产一区99re久久| 久久精品欧洲| 亚洲日本理论电影| 午夜精品一区二区三区四区| 老司机一区二区三区| 亚洲伦理一区| 久久久99精品免费观看不卡| 欧美精品情趣视频| 国产亚洲在线| 亚洲美女毛片| 久久成人18免费网站| 亚洲黄一区二区三区| 欧美一级艳片视频免费观看| 欧美成人第一页| 国产午夜精品理论片a级大结局 | 久久国产99| 国产精品www网站| 亚洲国产精品123| 新狼窝色av性久久久久久| 亚洲第一黄网| 羞羞答答国产精品www一本 | 9人人澡人人爽人人精品| 欧美一区免费| 亚洲美女啪啪| 久久精品一区蜜桃臀影院 | 亚洲国产成人av在线|