• <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>
            隨筆 - 87  文章 - 279  trackbacks - 0
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 216558
            • 排名 - 117

            最新評論

            閱讀排行榜

            評論排行榜

            寫了個比較通用的堆,可直接用作優先隊列

            Silver Cow Party
            Time Limit:2000MS  Memory Limit:65536K
            Total Submit:1112 Accepted:326

            Description

            One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ XN). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires Ti (1 ≤ Ti ≤ 100) units of time to traverse.

            Each cow must walk to the party and, when the party is over, return to her farm. Each cow is lazy and thus picks an optimal route with the shortest time. A cow's return route might be different from her original route to the party since roads are one-way.

            Of all the cows, what is the longest amount of time a cow must spend walking to the party and back?

             

            Input
            Line 1: Three space-separated integers, respectively: N, M, and X
            Lines 2..M+1: Line i+1 describes road i with three space-separated integers: Ai, Bi, and Ti. The described road runs from farm Ai to farm Bi, requiring Ti time units to traverse.

            Output
            Line 1: One integer: the maximum of time any one cow must walk.

            Sample Input

            4 8 2
            1 2 4
            1 3 2
            1 4 7
            2 1 1
            2 3 5
            3 1 2
            3 4 4
            4 2 3

             

            Sample Output

            10

             

            Hint
            Cow 4 proceeds directly to the party (3 units) and returns via farms 1 and 3 (7 units), for a total of 10 time units.

            Source
            USACO 2007 February Silver



            #include <iostream>
            using namespace std;

            const int INF = 1 << 28;

            int adj[1001][1001], adjw[1001][1001], na[1001];
            int n, m, x;


            //heap sink,swim,getmin,insert參數均為外部編號,wt為其權值
            int heap[100001], id[100001], hsize;
            int *key;
            void init(int s, int *wt) {
                
            int i;
                hsize 
            = s; 
                key 
            = wt;
                
            for (i=1; i<=hsize; i++{
                    heap[i] 
            = i;
                    id[i] 
            = i;
                }

            }

            void swim(int u) {
                
            int p = id[u], q = p >> 1, ku = key[u];
                
            while (q && ku < key[heap[q]]) {
                    id[heap[q]] 
            = p;
                    heap[p] 
            = heap[q];
                    p 
            = q;
                    q 
            = p >> 1;
                }

                id[u] 
            = p;
                heap[p] 
            = u;
            }

            void sink(int u) {
                
            int p = id[u],q = p << 1, ku = key[u];
                
            while (q <= hsize) {
                    
            if (q < hsize && key[heap[q+1]] < key[heap[q]]) q++;
                    
            if (key[heap[q]] >= ku) break;
                    id[heap[q]] 
            = p;
                    heap[p] 
            = heap[q];
                    p 
            = q; 
                    q 
            = p << 1;
                }

                id[u] 
            = p;
                heap[p] 
            = u;
            }

            int getmin() {
                
            int ret = heap[1];
                id[ret] 
            = -1;
                id[heap[hsize]] 
            = 1;
                heap[
            1= heap[hsize];
                hsize
            --;
                sink(heap[
            1]);
                
            return ret;
            }

            void insert(int u) {
                heap[
            ++hsize] = u;
                id[u] 
            = hsize;
                swim(u);
            }

            void build() {
                
            int i;
                
            for (i=hsize/2; i>0; i--) sink(heap[i]);
            }

            bool isEmpty() {
                
            return hsize == 0;
            }

            int dijkstraHeap(int beg, int end=-1{
                
            int i, j, k, u, v, w;
                
            int dist[1001], chk[1001];
                
            for (i=1; i<=n; i++{
                    dist[i] 
            = INF;
                    chk[i] 
            = 0;
                }

                init(n, dist);
                dist[beg] 
            = 0; swim(beg);
                
            while (!isEmpty()) {
                    u 
            = getmin();
                    
            if (u == end) break;
                    chk[u] 
            = 1;
                    
            for (i=0; i<na[u]; i++{
                        v 
            = adj[u][i];
                        w 
            = adjw[u][i];
                        
            if (dist[v] > dist[u] + w) {
                            dist[v] 
            = dist[u] + w;
                            swim(v);
                        }

                    }

                }

                
            if (end == -1return dist[n];
                
            return dist[end];
            }


            int main() {
                
            int i, j, k, u, v, w;
                
            int val[1001];
                scanf(
            "%d%d%d"&n, &m, &x);
                
            for (i=0; i<m; i++{
                    scanf(
            "%d%d%d"&u, &v, &w);
                    adj[u][na[u]] 
            = v; 
                    adjw[u][na[u]] 
            = w;
                    na[u]
            ++;
                }

               
                dijkstraHeap(x);
                memcpy(val, key, 
            sizeof(val));
                
                
            int ans = 0;
                
            for (i=1; i<=n; i++{
                    
            int tmp = dijkstraHeap(i,x);
                    
            if (tmp+val[i] > ans) ans = tmp + val[i];
                }

                
                printf(
            "%d\n", ans);
                
            return 0;
            }
            posted on 2007-07-23 20:51 閱讀(1281) 評論(4)  編輯 收藏 引用 所屬分類: 數據結構與算法ACM題目

            FeedBack:
            # re: pku3268 dij+heap 2007-07-27 08:41 oyjpart
            終于更新blog了。。。  回復  更多評論
              
            # re: pku3268 dij+heap 2007-08-01 20:29 relic
            不必n次dijkstra,只要把所有邊反向,再來一次dijkstra就可以了。算上第一次一共兩次dij  回復  更多評論
              
            # re: pku3268 dij+heap 2007-08-03 22:58 
            偷懶了:)  回復  更多評論
              
            # re: pku3268 dij+heap 2007-09-18 13:16 drizzlecrj
            @relic
            re  回復  更多評論
              
            一级A毛片免费观看久久精品| 久久精品桃花综合| 国产综合久久久久久鬼色| AAA级久久久精品无码片| 青青草原综合久久| 久久影院午夜理论片无码| 思思久久精品在热线热| 丰满少妇高潮惨叫久久久| 国产精品女同一区二区久久| 久久久久亚洲精品日久生情| 久久国产成人精品麻豆| 久久久久久久女国产乱让韩| 999久久久国产精品| 日韩人妻无码一区二区三区久久 | 88久久精品无码一区二区毛片| 久久久久这里只有精品| 国产精品久久久久影视不卡| 婷婷久久五月天| yellow中文字幕久久网| 无码人妻精品一区二区三区久久久| 国产精久久一区二区三区| 亚洲精品无码久久久久sm| 色综合久久天天综线观看| 天天综合久久久网| 久久亚洲美女精品国产精品| 精品久久久一二三区| 久久精品人妻一区二区三区| www亚洲欲色成人久久精品| 国产精品一区二区久久国产| 精品久久久无码人妻中文字幕| 亚洲午夜精品久久久久久浪潮| 久久久久这里只有精品| 久久久久亚洲精品中文字幕| 国产精品99久久精品爆乳| AAA级久久久精品无码区| 久久精品嫩草影院| 精品久久久久久无码中文野结衣| 99久久国产主播综合精品 | 伊人久久综合无码成人网| 午夜精品久久久久9999高清| 久久精品国产99久久久香蕉|