2953: [Poi2002]商務旅行

來源:互聯網
上載者:User

標籤:

2953: [Poi2002]商務旅行Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 8  Solved: 8
[Submit][Status]Description 某首都城市的商人要經常到各城鎮去做生意,他們按自己的路線去做,目的是為了更好的節約時間。假設有N個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路串連,任意兩個城鎮之間如果有直連道路,在他們之間行駛需要花費單位時間。該國公路網路發達,從首都出發能到達任意一個城鎮,並且公路網路不會存在環。你的任務是協助該商人計算一下他的最短旅行時間。Input第一行有一個整數N,1<= n<=30 000,為城鎮的數目。下面N-1行,每行由兩個整數 a 和 b (1<= ab<=n; a<>b)組成,表示城鎮a和城鎮b有公路串連。在第N+1行為一個整數M,下面的M行,每行有該商人需要順次經過的各城鎮編號。 Output輸出該商人旅行的最短時間。 Sample Input5
1 2
1 5
3 5
4 5
4
1
3
2
5
Sample Output
7
HINT Source

 

 題解:本來想在codevs做一道線段樹題目的,可是進入線段樹分類後就發現了這個(HansBug:呵呵呵呵這個也叫線段樹我也是醉了 phile:爾等蒟蒻膽敢搶我台詞?嗯哼? HansBug:我錯了^_^)只要學過LCA的童鞋不難發現這就是一個最裸的LCA,直接上倍增搞搞就行了,連加上邊長數組都免了。。。
  1 type  2     point=^node;  3     node=record  4                g:longint;  5                next:point;  6     end;  7   8 var  9    i,j,k,l,m,n,t:longint; 10    a:array[0..50000] of point; 11    c:array[0..20,0..50000] of longint; 12    d:array[0..50000] of longint; 13 function min(x,y:longint):longint;inline; 14          begin 15               if x<y then min:=x else min:=y; 16          end; 17 function max(x,y:longint):longint;inline; 18          begin 19               if x>y then max:=x else max:=y; 20          end; 21 procedure swap(var x,y:longint);inline; 22           var z:longint; 23           begin 24                z:=x;x:=y;y:=z; 25           end; 26 procedure add(x,y:longint);inline; 27           var p:point; 28           begin 29                new(p); 30                p^.g:=y; 31                p^.next:=a[x]; 32                a[x]:=p; 33           end; 34 procedure dfs(x:longint);inline; 35           var p:point; 36           begin 37                p:=a[x]; 38                while p<>nil do 39                      begin 40                           if c[0,p^.g]=0 then 41                              begin 42                                    c[0,p^.g]:=x; 43                                    d[p^.g]:=d[x]+1; 44                                    dfs(p^.g); 45                              end; 46                           p:=p^.next; 47                      end; 48           end; 49 function getfat(x,y:longint):longint;inline; 50          var i,j,k:longint; 51          begin 52               i:=0; 53               while y>0 do 54                     begin 55                          if odd(y) then x:=c[i,x]; 56                          inc(i);y:=y div 2; 57                     end; 58               getfat:=x; 59          end; 60 function dis(x,y:longint):longint; 61          var 62             a1,a2,a3,i,j,k,l:longint; 63          begin 64               if d[x]<d[y] then swap(x,y); 65               a1:=x;a2:=y; 66               x:=getfat(x,d[x]-d[y]); 67               if x=y then exit(d[a1]-d[a2]); 68               for i:=20 downto 0 do 69                   begin 70                        if c[i,x]=0 then continue; 71                        if c[i,x]<>c[i,y] then 72                           begin 73                                x:=c[i,x]; 74                                y:=c[i,y]; 75                           end 76                   end; 77               a3:=c[0,x]; 78               exit(d[a1]+d[a2]-d[a3]-d[a3]); 79          end; 80  81 begin 82      readln(n); 83      for i:=1 to n do a[i]:=nil; 84      for i:=1 to n-1 do 85          begin 86               readln(j,k); 87               add(j,k);add(k,j); 88          end; 89      fillchar(c,sizeof(c),0); 90      fillchar(d,sizeof(d),0); 91      c[0,1]:=-1; 92      dfs(1);c[0,1]:=0; 93      for i:=1 to 20 do 94          for j:=1 to n do 95              c[i,j]:=c[i-1,c[i-1,j]]; 96      readln(m); 97      readln(j);l:=0; 98      for i:=1 to m-1 do 99          begin100               k:=j;101               readln(j);102               t:=dis(k,j);103               l:=l+t;104          end;105      writeln(l);106      readln;107 end.108            

 

2953: [Poi2002]商務旅行

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.