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

gzwzm06

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  1 隨筆 :: 52 文章 :: 17 評論 :: 0 Trackbacks
  1#include <stdio.h>
  2#include <cstring>
  3
  4const int MAXN = 10001001 ;
  5const __int64 INT_MAX = 2000000000 ;
  6
  7
  8//edge 原圖 redge 反圖
  9//用反圖求Dij,就可算出其他點到源點的最短路徑(非常有用)
 10struct EDGE
 11{
 12    int ID ;
 13    __int64 wg ;
 14    struct EDGE *next ;
 15}
edge[MAXN], redge[MAXN], g_Temp[MAXN * 2] ;
 16
 17int g_Level = 0 ;
 18
 19int V , E ;
 20__int64 weight[MAXN] ;
 21__int64 ecost[MAXN] ;
 22bool visited[MAXN] ;
 23
 24struct Heap
 25{
 26    int ID ;
 27    __int64 wg ;
 28    
 29    void operator = ( const Heap& x )
 30    {
 31        ID = x.ID ;
 32        wg = x.wg ;
 33    }

 34    
 35}
 HeapArray[MAXN * 2] ;
 36
 37int g_Htail ;
 38
 39inline void HeapPush( const int& id, const __int64& val )
 40{
 41    int currentPos, parentPos ;
 42    
 43    currentPos = g_Htail ;
 44    parentPos = (( currentPos - 1 ) >> 1) ;
 45    
 46    HeapArray[g_Htail].ID = id ;
 47    HeapArray[g_Htail++].wg = val ;
 48    
 49    while ( currentPos != 0 )
 50    {
 51        if ( HeapArray[parentPos].wg <= val )
 52            break ;
 53        else {
 54            HeapArray[currentPos] = HeapArray[parentPos] ;
 55            currentPos = parentPos ;
 56            parentPos = (( currentPos - 1 ) >> 1) ;
 57        }

 58    }

 59    
 60    HeapArray[currentPos].ID = id ;
 61    HeapArray[currentPos].wg = val ;
 62}

 63
 64inline int HeapPop()
 65{
 66    if ( g_Htail == 0 )
 67        return -1 ;
 68    
 69    int currentPos, childPos ;
 70    
 71    int result = HeapArray[0].ID ;
 72    
 73    HeapArray[0= HeapArray[g_Htail - 1] ;
 74    g_Htail-- ;
 75    
 76    currentPos = 0 ;
 77    childPos = 1 ;
 78    Heap target = HeapArray[0] ;
 79    
 80    while ( childPos < g_Htail )
 81    {
 82        if ( (childPos + 1 < g_Htail)
 83            && (HeapArray[childPos + 1].wg <= HeapArray[childPos].wg) )
 84        {
 85            childPos = childPos + 1 ;
 86        }

 87        
 88        if ( target.wg <= HeapArray[childPos].wg )
 89            break
 90        else {
 91            HeapArray[currentPos] = HeapArray[childPos] ;
 92            currentPos = childPos ;
 93            childPos = 2 * currentPos + 1 ;
 94        }

 95    }

 96    
 97    HeapArray[currentPos] = target ;
 98    
 99    return result ;
100}

101
102void HeapDij( int src, int dis, bool rg = false )
103{
104    int i ;
105    
106    for ( i = 1 ; i <= V ; ++i )
107    {
108        ecost[i] = INT_MAX ;
109        visited[i] = false ;
110    }

111    ecost[src] = 0 ;
112    EDGE *ptr ;
113
114    if ( !rg )
115        ptr = edge[src].next ;
116    else
117        ptr = redge[src].next ;
118    
119    while ( ptr ){
120        ecost[ptr->ID] = ptr->wg ;
121        ptr = ptr->next ;
122    }

123    
124    g_Htail = 0 ;
125    
126    for ( i = 1 ; i <= V ; ++i )
127    {
128        HeapPush( i , ecost[i] ) ;
129    }

130    
131    visited[src] = true ;
132    
133    for ( i = 1 ; i < V ; ++i )
134    {
135        int v = HeapPop() ;
136        
137        while ( visited[v] )
138            v = HeapPop() ;
139        
140        if ( ecost[v] == INT_MAX )
141            break ;
142        
143        visited[v] = true ;
144        
145        if ( !rg )
146            ptr = edge[v].next ;
147        else
148            ptr = redge[v].next ;
149        
150        while ( ptr ){
151            
152            if ( !visited[ptr->ID] && ecost[ptr->ID] > ecost[v] + ptr->wg )
153            {
154                ecost[ptr->ID] = ecost[v] + ptr->wg ;
155                HeapPush( ptr->ID , ecost[ptr->ID] ) ;
156            }

157            ptr = ptr->next ;
158        }

159    }

160}

161
162void Init()
163{
164    int i ;
165    
166    for ( i = 0 ; i <= V ; ++i )
167    {
168        edge[i].next = NULL ;
169        redge[i].next = NULL ;
170    }

171    g_Htail = 0 ;
172    g_Level = 0 ;
173}

174
175inline void Insert( const int& x, const int& y, const __int64& val )
176{
177    EDGE *ptr = &g_Temp[g_Level++] ;
178    ptr->ID = y;
179    ptr->wg = val ;
180    ptr->next = edge[x].next ;
181    edge[x].next = ptr ;
182
183    ptr = &g_Temp[g_Level++] ;
184    ptr->ID = x;
185    ptr->wg = val ;
186    ptr->next = redge[y].next ;
187    redge[y].next = ptr ;    
188}

189
190int main()
191{
192    int j , x , y , t ;
193    int w ;
194
195//    freopen("in.txt", "r", stdin) ;
196
197    scanf("%d"&t) ;
198    while ( t-- )
199    {
200        scanf("%d %d"&V, &E) ;
201        Init() ;
202        
203        for ( j = 1 ; j <= E ; ++j )
204        {
205            scanf("%d %d %d"&x, &y, &w) ;
206            Insert( x, y, w ) ;
207        }
    
208        
209        __int64 ans = 0 ;
210        
211        //先求1到其他點的最短路徑
212        HeapDij( 1, V ) ;
213        
214        for ( j = 2 ; j <= V ; ++j )
215            ans += ecost[j] ;
216
217        //在求其他點到1的最短路徑
218        HeapDij( 1, V, true ) ;
219        
220        for ( j = 2 ; j <= V ; ++j )
221            ans += ecost[j] ;
222
223        printf("%I64d\n", ans) ;
224    }

225    
226    return 0 ;
227}
posted on 2008-11-19 23:18 閱讀(483) 評論(0)  編輯 收藏 引用 所屬分類: 圖論
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲综合日韩在线| 欧美日韩成人综合天天影院| 亚洲日本无吗高清不卡| 亚洲男人天堂2024| 亚洲精品永久免费| 久久经典综合| 亚洲一区二区三区色| 免费久久99精品国产自在现线| 欧美一站二站| 国产精品高清网站| 亚洲精品美女在线| 韩国亚洲精品| 亚洲欧美一区在线| 午夜久久久久久久久久一区二区| 欧美aⅴ一区二区三区视频| 久久久久久91香蕉国产| 国产精品日日摸夜夜摸av| 亚洲精一区二区三区| 亚洲精品久久久蜜桃| 欧美成人精品在线观看| 欧美成年人视频网站欧美| 黄色成人在线观看| 久久高清免费观看| 久久精品女人的天堂av| 国产午夜亚洲精品不卡| 欧美一级日韩一级| 久久久久久高潮国产精品视| 国产一本一道久久香蕉| 久久精品99无色码中文字幕| 久久精品91久久久久久再现| 国产一区二区| 久久久www| 欧美国产日韩xxxxx| 最新国产成人在线观看| 欧美久久婷婷综合色| 亚洲免费电影在线观看| 亚洲一级黄色av| 国产精品一二一区| 欧美一区二区三区四区夜夜大片| 久久亚洲精品中文字幕冲田杏梨| 极品av少妇一区二区| 久久综合网色—综合色88| 亚洲第一页在线| 亚洲最黄网站| 国产精品亚洲а∨天堂免在线| 亚洲欧美日韩高清| 蜜桃av噜噜一区| 亚洲美女一区| 国产精品一区二区三区久久久| 久久精品免费播放| 91久久国产综合久久| 亚洲男人的天堂在线观看| 国产欧美日韩在线观看| 久久午夜精品一区二区| 亚洲国产91| 欧美一区=区| 亚洲激情网站免费观看| 欧美视频手机在线| 久久高清国产| 亚洲欧洲日产国码二区| 欧美一区二区三区精品| 91久久嫩草影院一区二区| 欧美色播在线播放| 久久久99久久精品女同性| 亚洲欧洲一区二区在线播放 | 国产精品无码专区在线观看| 欧美在线视频不卡| 亚洲激情六月丁香| 欧美在线一级va免费观看| 亚洲国产成人精品久久久国产成人一区| 欧美理论电影网| 久久精品官网| 在线视频欧美精品| 亚洲高清一区二| 久久成人在线| 亚洲无吗在线| 亚洲七七久久综合桃花剧情介绍| 国产精品久久一级| 欧美国产日韩在线| 久久久福利视频| 亚洲小说区图片区| 亚洲三级网站| 欧美成人在线免费观看| 久久精品国产一区二区电影 | 久久视频在线看| 亚洲一区二区3| 亚洲精品欧洲精品| 免费在线亚洲| 久久先锋资源| 久久国产精品免费一区| 亚洲伊人一本大道中文字幕| 亚洲国产导航| 依依成人综合视频| 国产亚洲欧美一区二区| 国产精品永久免费视频| 欧美日韩精品免费看| 美女国产一区| 久久夜色精品国产| 久久亚洲精品欧美| 欧美在线视频免费观看| 亚洲自拍偷拍麻豆| 亚洲一区不卡| 亚洲视频axxx| 亚洲一区二区三区精品在线观看| 亚洲老板91色精品久久| 亚洲青色在线| 亚洲人成7777| 洋洋av久久久久久久一区| 亚洲精品日韩欧美| 日韩亚洲欧美一区| 亚洲精品一区二区在线| 亚洲卡通欧美制服中文| 亚洲人体偷拍| 99国产精品久久久久久久| 一本色道久久综合| 亚洲一区二区三区视频| 亚洲欧美激情视频| 欧美亚洲免费在线| 久久久xxx| 女人天堂亚洲aⅴ在线观看| 欧美a级一区| 欧美日韩国产在线| 国产精品久久久久毛片大屁完整版| 国产精品国内视频| 国产精品一级二级三级| 国产午夜精品一区二区三区视频| 国内免费精品永久在线视频| 在线不卡视频| 中日韩高清电影网| 欧美一区二区日韩| 麻豆成人91精品二区三区| 亚洲福利视频二区| 亚洲午夜精品网| 久久成人国产精品| 欧美福利一区| 国产精品美女| 伊人婷婷久久| 亚洲特色特黄| 久久久久久亚洲综合影院红桃| 欧美国产第一页| 日韩亚洲欧美中文三级| 香蕉久久一区二区不卡无毒影院| 久久久精品日韩欧美| 欧美日韩国产色视频| 国产精品一二三| 亚洲黄色大片| 欧美一区高清| 亚洲欧洲日韩综合二区| 午夜视频一区| 欧美激情综合| 狠狠色狠色综合曰曰| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲全部视频| 欧美在线观看日本一区| 欧美黄网免费在线观看| 亚洲一级一区| 欧美精品少妇一区二区三区| 国产一区99| 亚洲综合日本| 亚洲欧洲在线视频| 久久精品亚洲国产奇米99| 欧美日韩综合视频| 亚洲国产精品一区制服丝袜| 性欧美大战久久久久久久免费观看| 亚洲第一精品电影| 欧美在线看片| 国产精品一级二级三级| 99在线|亚洲一区二区| 美女视频黄免费的久久| 亚洲综合社区| 欧美日韩亚洲激情| 亚洲精品视频啊美女在线直播| 久久精品一区二区三区不卡牛牛 | 最新日韩精品| 美女性感视频久久久| 亚洲免费在线电影| 欧美三级黄美女| 亚洲精选一区| 欧美福利视频在线观看| 欧美在线免费看| 国产精品午夜国产小视频| 亚洲午夜视频在线观看| 亚洲电影免费观看高清完整版| 久久久久91| 国外成人在线| 久久久精品国产一区二区三区 | 黄色成人av网站| 欧美一区亚洲二区| 亚洲午夜一区二区| 国产精品美女主播| 亚洲欧美日韩精品久久久久| 亚洲免费精品| 欧美午夜视频网站| 亚洲一二三区精品| 亚洲无限乱码一二三四麻| 欧美日韩综合久久| 亚洲在线观看免费| 亚洲午夜视频| 国产视频一区三区| 久久夜色精品一区|