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

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋

題目地址:
         http://acm.hdu.edu.cn/showproblem.php?pid=2066
題目描述:
一個人的旅行
Time Limit: 
1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 
4077    Accepted Submission(s): 1348


Problem Description
雖然草兒是個路癡(就是在杭電待了一年多,居然還會在校園里迷路的人,汗
~),但是草兒仍然很喜歡旅行,因為在旅途中 會遇見很多人(白馬王子,^0^),很多事,還能豐富自己的閱歷,還可以看美麗的風景……草兒想去很多地方,她想要去東京鐵塔看夜景,去威尼斯看電影,去陽明山上看海芋,去紐約純粹看雪景,去巴黎喝咖啡寫信,去北京探望孟姜女……眼看寒假就快到了,這么一大段時間,可不能浪費啊,一定要給自己好好的放個假,可是也不能荒廢了訓練啊,所以草兒決定在要在最短的時間去一個自己想去的地方!因為草兒的家在一個小鎮上,沒有火車經過,所以她只能去鄰近的城市坐火車(好可憐啊~)。
 

Input
輸入數據有多組,每組的第一行是三個整數T,S和D,表示有T條路,和草兒家相鄰的城市的有S個,草兒想去的地方有D個;
接著有T行,每行有三個整數a,b,time,表示a,b城市之間的車程是time小時;(
1=<(a,b)<=1000;a,b 之間可能有多條路)
接著的第T
+1行有S個數,表示和草兒家相連的城市;
接著的第T
+2行有D個數,表示草兒想去地方。
 

Output
輸出草兒能去某個喜歡的城市的最短時間。
 

Sample Input
6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10
 

Sample Output
9

題目分析:
        剛開始做的時候也沒做分析, 直接就是枚舉每個起點到每個終點的 最短距離, 然后取最短的路,  很顯然, TLE.................
還是自己沒有把DIJKSTRA 算法理解好.... 再次看了一遍算法的描述和數據結構書上的 sample后 發現, 其實算法執行過程中
已經把起點到其他點的最短距離全部算出來了, 所以只需要 枚舉每個起點就可以了, 興奮之下, 馬上修改了代碼, Submit! ......
很 杯具, 還是tle ...... 不明白為什么.....看網上其他人寫的 解題報告 , 原來很多人也是這做的, 枚舉起始點, 但是他們的卻可以AC.
雖然時間一般是 100MS左右. 這里我一直很糾結, 不明白同樣的算法為什么我的會TLE.    
         在 AMB 大牛的提示下, 不需要全部枚舉, 只要把所有起點的距離都設置成0就可以了,  但是不知道為什么, 還是一直TLE.

最后的辦法是:   設置一個起點指向所有起點, 之間的距離設置為 1, 同樣 設置一個終點指向所有終點, 距離同樣設置為1, 最后
使用 DIJKSTRA 算法 求出起點到終點的最短距離 - 2 就行了. 

代碼如下:
#include <iostream>
using namespace std;
const int INF = 0x7FFFFFFF;
int T,S,D,L;
const int MAXN=1005;    //點個數
int graph[MAXN][MAXN];
int s[MAXN];
int d[MAXN];
int Dijkstra ( int beg, int end )
{
    
bool hash[MAXN];
    
int path[MAXN];
    
for ( int i = 0; i <= L; ++ i )
    {
          hash[i] 
= true;
          path[i] 
= INF; 
    } 
    hash[beg] 
= false;
    path[beg] 
= 0;
    
while ( beg != end )
    {
           
for ( int i = 0; i <= L; ++ i )
           {
                 
if ( graph[beg][i] != 0 )
                 {
                      
if ( path[i] > path[beg] + graph[beg][i] ) 
                           path[i] 
= path[beg] + graph[beg][i];
                 } 
           } 
           
int min = INF;
           
for ( int i = 0; i <= L; ++ i )
           {
                 
if ( min > path[i] && hash[i] )
                 {
                      min 
= path[i];
                      beg 
= i; 
                 } 
           }
           hash[beg] 
= false;
    }   
    
return path[end];
}

int main ()

    
while ( scanf ( "%d%d%d",&T,&S,&D ) != EOF )
    {
          memset ( graph , 
0 , sizeof ( graph ) );
          L 
= 0;
          
for ( int i = 1; i <= T; ++ i )
          {
                
int r,c,cost;
                scanf ( 
"%d%d%d",&r,&c,&cost );
                
if ( graph[r][c] == 0 )
                     graph[r][c] 
= graph[c][r] = cost ;
                
else
                {
                     
if ( cost < graph[r][c] ) 
                          graph[r][c] 
= graph[c][r] = cost ;
                }
                
if ( L < max ( r,c ) )
                     L 
= max ( r,c );
          } 
          
for ( int i = 0; i != S; ++ i )
          {
               scanf ( 
"%d",&s[i] );
               graph[
0][ s[i] ] = 1
               graph[ s[i] ][
0= 1;     
          }
          L 
++;
          
for ( int i = 0; i != D; ++ i )
          {
               scanf ( 
"%d",&d[i] );
               graph[ d[i] ][ L ] 
= 1;
               graph[ L ][ d[i] ] 
= 1;
          }
          
          cout 
<< Dijkstra ( 0,L ) - 2 << endl;  
    }
    
return 0



順便 0rz 下大牛 代碼:
#include <iostream>
#define MAX 1005
#define INF 0x7FFF
#define CMP(A,B) (A.d < B.d)
using namespace std;
int d[MAX][MAX];
class HNode {
      
public:
              
int v;
              
int d;
};
class Heap {
public:
        HNode h[MAX 
* 2];
        
int n, p, c;
        Heap() {
                n 
= 0;
        }
        
void inline ins(HNode e) {
                
for (p = ++n; p > 1 && CMP(e,h[p>>1]); h[p] = h[p>>1], p >>= 1)
                        ;
                h[p] 
= e;
        }
        
int inline pop(HNode &e) {
                
if (!n)
                        
return 0;
                
for (e = h[p = 1], c = 2; c < n
                                
&& CMP(h[c += (CMP(h[c + 1],h[c]) && c < n - 1)], h[n]);
                                h[p] 
= h[c], p = c, c <<= 1)
                        ;
                h[p] 
= h[n--];
                
return 1;
        }
};
int Dijkstra(int A, int B, int N) {
        
int dist[MAX];
        
int mask[MAX];
        
int Tmp;
        Heap h;
        HNode e, ne;

        
for (int i = 0; i < N; i++) {
                dist[i] 
= INF;
                mask[i] 
= 0;
        }
        dist[e.v 
= A] = (e.d = 0);
        h.ins(e);
        
while (h.pop(e)) {
                
if (!mask[e.v]) {
                        mask[e.v] 
= 1;
                        
for (int i = 0; i < N; i++) {
                                
if (!mask[i] && (Tmp = e.d + d[e.v][i])
                                                
< dist[i]) {
                                        dist[ne.v 
= i] = (ne.d = Tmp);
                                        h.ins(ne);
                                }
                        }
                }
        }
        
return dist[B];
}
int main() {
        
int T, S, D, M;
        
int st, en, tm;
        
while (scanf("%d %d %d"&T, &S, &D)!=EOF) {
                M 
= 0;
                
for (int i = 0; i < MAX; i++)
                        
for (int j = 0; j < MAX; j++)
                                d[i][j] 
= INF;
                
for (int i = 0; i < T; i++) {
                        scanf(
"%d %d %d"&st, &en, &tm);
                        
if (tm < d[st][en]) {
                                d[st][en] 
= d[en][st] = tm;
                        }

                        M 
= st> M ? st : M;
                        M 
= en> M ? en : M;
                }
                M 
= M + 1;
                
for (int i = 0; i < S; i++) {
                        scanf(
"%d"&st);
                        d[
0][st] = 1;
                        d[st][
0= 1;
                }

                
for (int i = 0; i < D; i++) {
                        scanf(
"%d"&en);
                        d[M][en] 
= 1;
                        d[en][M] 
= 1;
                }
                cout
<<Dijkstra(0, M, M+1)-2<<endl;
        }
        
return 0;
}

Feedback

# re: HDOJ 2066 HDU 2066 一個人的旅行 ACM 2066 IN HDU   回復  更多評論   

2011-03-10 15:36 by Sticktotheend
http://acm.hdu.edu.cn/showproblem.php?pid=3790
你好,看了你的博客,我表示你真的很牛~~~
而且你的代碼不像其它的那些用了很多的模板和容器,看起來舒服很多。關于最短路徑問題,想問你就是杭電3790那道題,你有做過嗎?要是AC了能發給我看看?謝謝啦。我郵箱dmx23344@sina.com
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产三级欧美三级| 一区二区三区高清视频在线观看| 国产视频欧美| 国产精品永久免费| 国产一区二区三区精品久久久| 国产精品综合久久久| 国产麻豆一精品一av一免费| 国产乱码精品一区二区三区不卡| 国产日韩在线不卡| 黑人一区二区| 亚洲精品乱码久久久久久日本蜜臀| 亚洲精品欧美日韩专区| 日韩亚洲精品视频| 欧美一区二区成人6969| 久久婷婷久久| 亚洲人成在线观看网站高清| 91久久精品国产91久久| 亚洲香蕉伊综合在人在线视看| 先锋资源久久| 欧美成人精品激情在线观看 | 玖玖精品视频| 欧美日韩免费在线| 国产在线不卡| 一区二区三区高清不卡| 久久激情综合| 日韩视频专区| 免费观看一区| 午夜精品国产| 亚洲人成网站色ww在线| 一区二区在线不卡| 夜夜嗨网站十八久久| 先锋亚洲精品| 亚洲欧洲一区二区三区在线观看| 亚洲视频一区二区在线观看 | 亚洲午夜久久久久久尤物| 久久久久久久尹人综合网亚洲| 亚洲国产免费| 久久激情久久| 国产美女搞久久| 99精品国产热久久91蜜凸| 久久影音先锋| 欧美亚洲综合在线| 国产精品hd| 一本色道**综合亚洲精品蜜桃冫 | 亚洲午夜免费视频| 久久精品国产精品亚洲| 欧美日韩福利视频| 在线观看日韩国产| 久久精品国产久精国产爱| 亚洲开发第一视频在线播放| 免费看亚洲片| 亚洲国产mv| 久久综合国产精品| 亚洲欧美在线aaa| 欧美日韩一区二区三区在线看| 亚洲激情图片小说视频| 久久久久久久久蜜桃| 亚洲一区二区在线免费观看视频 | 亚洲一区二区三区精品在线| 欧美国产日本韩| 亚洲欧洲另类| 亚洲第一精品夜夜躁人人躁 | 国产精品欧美一区喷水| 亚洲欧美国产三级| 亚洲午夜未删减在线观看| 国产精品草草| 亚洲欧美国产精品桃花| 亚洲一区二区不卡免费| 国产精品色婷婷久久58| 久久福利毛片| 久久免费观看视频| 亚洲精品一区二区三区在线观看| 亚洲黄色视屏| 欧美性猛交99久久久久99按摩| 亚洲一级在线观看| 先锋影音国产一区| 狠狠色丁香婷婷综合影院| 免费成人毛片| 欧美国产精品| 欧美一区二区观看视频| 先锋影音久久久| 1000部精品久久久久久久久| 欧美大片91| 国产精品高潮久久| 麻豆av福利av久久av| 欧美黄色视屏| 久久超碰97人人做人人爱| 久久久久欧美| 亚洲影院色无极综合| 欧美一站二站| a91a精品视频在线观看| 亚洲欧美日韩一区二区在线| 亚洲电影免费观看高清完整版在线观看 | 亚洲另类黄色| 国产视频精品免费播放| 国产精品人成在线观看免费 | 国产婷婷97碰碰久久人人蜜臀| 久久久久国产精品www| 麻豆精品传媒视频| 亚洲女性喷水在线观看一区| 久久国产精品99久久久久久老狼| 亚洲精品五月天| 欧美亚洲一区二区在线| 亚洲精品视频免费在线观看| 亚洲一级黄色片| 亚洲日本成人在线观看| 亚洲影院高清在线| 亚洲精品视频啊美女在线直播| 亚洲欧美在线x视频| 亚洲国产精品免费| 亚洲欧美视频在线观看| 日韩天堂av| 久久久久久一区| 欧美伊人久久久久久午夜久久久久| 欧美gay视频| 美日韩精品免费| 国产亚洲一级高清| 亚洲免费视频网站| 亚洲天堂成人在线视频| 久久在线免费观看| 久久久久国产一区二区三区| 国产精品麻豆欧美日韩ww | 亚洲精品视频在线观看免费| 国产主播一区| 午夜精品久久久| 亚洲永久免费观看| 欧美人交a欧美精品| 亚洲东热激情| 亚洲国内欧美| 欧美不卡三区| 亚洲国产高清一区二区三区| 一区精品在线播放| 久久精品成人一区二区三区蜜臀| 亚洲欧洲99久久| 国产精品国产一区二区| aⅴ色国产欧美| 宅男噜噜噜66一区二区| 欧美日韩在线视频首页| 亚洲每日在线| 亚洲综合成人在线| 国产精品第13页| 亚洲一区二区三区精品视频 | 亚洲乱码国产乱码精品精可以看 | 国产亚洲成精品久久| 亚洲一区久久| 久久精品视频在线免费观看| 国产视频亚洲| 久久躁日日躁aaaaxxxx| 蜜桃av一区二区在线观看| 在线观看日韩av电影| 久久中文字幕一区二区三区| 亚洲精品在线免费| 最新高清无码专区| 99xxxx成人网| 国产精品久久久久毛片大屁完整版| 99国产精品| 久久精品综合一区| 亚洲国产小视频| 国产精品a久久久久久| 亚洲欧美欧美一区二区三区| 久久九九热re6这里有精品| 伊大人香蕉综合8在线视| 欧美成人精品不卡视频在线观看| 99精品99| 老司机一区二区三区| 91久久中文| 国产精品久久国产愉拍| 久久本道综合色狠狠五月| 欧美承认网站| 午夜精品福利电影| 在线电影国产精品| 欧美系列亚洲系列| 久久国产婷婷国产香蕉| 亚洲欧洲视频| 久久精品免费电影| 一本一本久久| 狠狠色噜噜狠狠狠狠色吗综合| 欧美高潮视频| 欧美一级片一区| 亚洲精品老司机| 久久综合成人精品亚洲另类欧美| 一本久久精品一区二区| 韩国精品久久久999| 国产精品chinese| 欧美精品 日韩| 久久久久久久网站| 亚洲综合成人婷婷小说| 亚洲国产老妈| 卡一卡二国产精品| 先锋影音网一区二区| 日韩亚洲精品视频| 在线观看国产精品淫| 国产伦一区二区三区色一情| 欧美黄污视频| 欧美大片免费| 免费久久99精品国产自| 久久精品在线播放| 亚洲欧美视频一区| 亚洲网址在线| 国产精品99久久久久久久vr|