• <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>
            posts - 14,  comments - 11,  trackbacks - 0
            題目大意:
               去掉給定的邊,看每一個(gè)點(diǎn)是否能從別的點(diǎn)到達(dá)!
                如果能夠到達(dá),則求出對(duì)于每一個(gè)點(diǎn)到其他所有的點(diǎn)最短距離之和,將這些和相加就是最后的結(jié)果

               解題思路:
                  對(duì)每一個(gè)點(diǎn)求一次單源最短路,然后求和,相加的到最后的結(jié)果……
                  但,算一下時(shí)間復(fù)雜度: 復(fù)雜度是O(M*N*M)。由于M*N*M=3000*100*3000=9*108,不可能AC

                  所以,需要我們另辟他徑。網(wǎng)上有說(shuō)建什么最短路徑樹(shù),這個(gè)我不懂……
                  我的思路是:引用前面的思路,對(duì)每一個(gè)點(diǎn)求一次最短路,并將其求和,保存在一個(gè)數(shù)組里頭,定為sum[i],i表示著一個(gè)點(diǎn)到所有其他點(diǎn)最短路之和。并將這些和相加 ans = sum[1]  + …… + sum[n]; 
                  然后,刪除一條邊,其頂點(diǎn)暫定為u,v,對(duì)這條邊的一個(gè)頂點(diǎn)u在一次求最短路,如果這個(gè)點(diǎn),不能到達(dá)這條邊的另一個(gè)點(diǎn)v,則 直接輸出INF
                  如果,能夠到達(dá),則對(duì)v也求一次最短路,對(duì)于u,v兩點(diǎn)來(lái)說(shuō),求得u到每一個(gè)點(diǎn)的最短路之和sum_u,求得v到每一個(gè)點(diǎn)的最短路之和sum_v,
                  最后結(jié)果為: ans = ans + sum_u + sum_v - sum[u] - sum[v];
                  ans為最后答案(千萬(wàn)記住是每一組的,因?yàn)橛衜條邊)
                  具體看代碼:
            http://acm.hdu.edu.cn/showproblem.php?pid=2433
            時(shí)間是 953ms
                     
              1 #include <iostream>
              2 #include <queue>
              3 using namespace std;
              4 const int SIZE = 102;
              5 const int INF = 1 << 30;
              6 struct node
              7 {
              8        int v, w, next;
              9 }map[SIZE * SIZE];
             10 
             11 int head[SIZE], use;
             12 int num[SIZE * 30];
             13 int sum[SIZE];
             14 
             15 void add(int u, int v, int w)
             16 {
             17      map[use].v = v;
             18      map[use].w = w;
             19      map[use].next = head[u];
             20      head[u] = use ++;
             21 }
             22 void init()
             23 {
             24      use = 0;
             25      memset(head, -1sizeof(head));
             26      memset(sum, 0sizeof(sum));
             27 }
             28 
             29 queue <int> q;
             30 bool vist[SIZE];
             31 int dis[SIZE];
             32 
             33 int spfa(int s)
             34 {
             35      while (!q.empty()) q.pop();
             36      
             37      for (int i = 0; i < SIZE ; i ++)  dis[i] = INF;
             38      
             39      memset(vist, falsesizeof(vist));
             40      dis[s] = 0;
             41      vist[s] = true;
             42      q.push(s);
             43      int ans = 0;
             44      while (!q.empty()) 
             45      {
             46            int u = q.front();
             47            q.pop();
             48            vist[u] = false;
             49            ans += dis[u];
             50            for (int i = head[u]; i != -1; i = map[i].next)
             51            {
             52                int v = map[i].v;
             53                if (dis[v] > dis[u] + map[i].w)
             54                {
             55                   dis[v] = dis[u] + map[i].w;
             56                   if (!vist[v])
             57                   {
             58                      vist[v] = true;
             59                      q.push(v);
             60                   }
             61                }
             62            }
             63      }
             64      return ans;
             65 }
             66 int main()
             67 {
             68      int n, m;
             69      while (scanf("%d%d"&n, &m) != EOF)
             70      {
             71            int i, j, k;
             72            int u, v;
             73            init();
             74            memset(num, 0sizeof(num));
             75            for (i = 1; i <= m; i++)
             76            {
             77                scanf("%d%d"&u, &v);
             78                num[i] = use;
             79                add(u, v, 1);
             80                add(v, u, 1);
             81            }
             82            int ans = 0;
             83            for (i = 1; i <= n; i++)  
             84            {
             85                sum[i] = spfa(i);
             86                ans += sum[i];
             87            }
             88            int tmp = ans;
             89            for (i = 1; i <= m; i++)
             90            {
             91                map[num[i]].w = INF;
             92                map[num[i]^1].w = INF;
             93                
             94                ans = tmp;
             95                ans += spfa(map[num[i]].v);
             96                
             97                if (dis[map[num[i]^1].v] == INF) 
             98                {
             99                   printf("INF\n");
            100                }
            101                else 
            102                {
            103                     ans += spfa(map[num[i]^1].v);
            104                     ans = ans - sum[map[num[i]].v] - sum[map[num[i]^1].v];
            105                     printf("%d\n", ans);
            106                }
            107                map[num[i]].w = 1;
            108                map[num[i]^1].w = 1;
            109            }
            110      }
            111 return 0;
            112 }
            113 

               
            posted on 2012-03-09 15:35 路修遠(yuǎn) 閱讀(1891) 評(píng)論(8)  編輯 收藏 引用 所屬分類(lèi): 路修遠(yuǎn)

            FeedBack:
            # re: HDU 2433 最短路
            2012-09-22 10:29 | ff
            這樣貌似不對(duì)啊啊  回復(fù)  更多評(píng)論
              
            # re: HDU 2433 最短路
            2012-09-22 10:47 | 路修遠(yuǎn)
            要不在看看有什么地方不同 ?@ff
              回復(fù)  更多評(píng)論
              
            # re: HDU 2433 最短路
            2012-09-22 10:50 | 路修遠(yuǎn)
            不知道你說(shuō)的是哪里有問(wèn)題 ,能不能指出來(lái) 咯? @ff
              回復(fù)  更多評(píng)論
              
            # re: HDU 2433 最短路
            2012-12-03 21:20 | attacker
            你這樣可以AC????刪除<U,V>不僅改變 u,v最短路啊、、、求解  回復(fù)  更多評(píng)論
              
            # re: HDU 2433 最短路
            2012-12-04 10:56 | 路修遠(yuǎn)
            @attacker
            the i-th line is the new SUM after the i-th road is destroyed  回復(fù)  更多評(píng)論
              
            # re: HDU 2433 最短路
            2013-01-04 19:56 |
            ans = ans + sum_u + sum_v - sum[u] - sum[v],
            這個(gè)公式不是很理解啊,不知道博主怎么想的啊,謝謝咯  回復(fù)  更多評(píng)論
              
            # re: HDU 2433 最短路
            2013-04-28 19:38 | test
            這方法應(yīng)該不對(duì)。 看下面這組數(shù)據(jù)
            4 4
            1 2
            2 3
            3 4
            2 4

            畫(huà)個(gè)圖,刪去最后一條邊 2 4 后的結(jié)果應(yīng)該是20,但是此方法的輸出是19   回復(fù)  更多評(píng)論
              
            # re: HDU 2433 最短路
            2014-08-23 17:21 | YueYueZha
            @test
            的確這組數(shù)據(jù)應(yīng)該輸出20的  回復(fù)  更多評(píng)論
              
            <2011年4月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            轉(zhuǎn)載,請(qǐng)標(biāo)明出處!謝謝~~

            常用鏈接

            留言簿(1)

            隨筆分類(lèi)

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評(píng)論

            • 1.?re: HDU 2433 最短路
            • @test
              的確這組數(shù)據(jù)應(yīng)該輸出20的
            • --YueYueZha
            • 2.?re: HDU 2433 最短路
            • 這方法應(yīng)該不對(duì)。 看下面這組數(shù)據(jù)
              4 4
              1 2
              2 3
              3 4
              2 4

              畫(huà)個(gè)圖,刪去最后一條邊 2 4 后的結(jié)果應(yīng)該是20,但是此方法的輸出是19
            • --test
            • 3.?re: HDU 2433 最短路
            • ans = ans + sum_u + sum_v - sum[u] - sum[v],
              這個(gè)公式不是很理解啊,不知道博主怎么想的啊,謝謝咯
            • --姜
            • 4.?re: HDU 2433 最短路
            • @attacker
              the i-th line is the new SUM after the i-th road is destroyed
            • --路修遠(yuǎn)
            • 5.?re: HDU 2433 最短路
            • 你這樣可以AC????刪除<U,V>不僅改變 u,v最短路啊、、、求解
            • --attacker

            閱讀排行榜

            評(píng)論排行榜

            伊人久久大香线蕉成人| 久久精品国产99久久久| 嫩草影院久久99| 99久久99久久精品国产片果冻| 51久久夜色精品国产| 久久精品国产亚洲精品| 国产精品亚洲综合久久 | 国产精品成人无码久久久久久| 麻豆久久| 久久精品国产精品亚洲艾草网美妙| 日本亚洲色大成网站WWW久久| 久久亚洲国产午夜精品理论片| 久久精品无码一区二区三区免费| 亚洲综合久久夜AV | 精品国产青草久久久久福利| av国内精品久久久久影院| 久久99国产精品久久99小说| 99精品久久久久中文字幕| 日韩人妻无码一区二区三区久久 | 亚洲伊人久久大香线蕉苏妲己| 思思久久好好热精品国产| 久久99精品久久久久久 | 久久最近最新中文字幕大全 | 久久久久无码精品| 久久成人国产精品| 色婷婷综合久久久久中文| 欧美亚洲国产精品久久久久| 久久久无码精品午夜| 亚洲天堂久久精品| 91精品国产综合久久久久久| 色综合久久无码中文字幕| 亚洲精品乱码久久久久久中文字幕 | 免费观看久久精彩视频| 精品熟女少妇av免费久久| 麻豆av久久av盛宴av| 一本大道久久东京热无码AV| 久久亚洲高清综合| 性高湖久久久久久久久AAAAA| 国产—久久香蕉国产线看观看| 欧美精品一区二区精品久久| 久久综合综合久久狠狠狠97色88|