日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ1849 Two——贪心——Pku1849

發布時間:2025/5/22 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ1849 Two——贪心——Pku1849 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類似于樹形動態規劃的貪心。題目大意:

這個城市由節點和連接節點的街道組成,街道是雙向的。此刻大雪覆蓋了這個城市,市長確定了一些街道要將它們清掃干凈,這些街道的確定保證所有節點可以通過它們連通而且街道數目盡可能小。有兩臺相同的掃雪機SM,它們的起點在同一個節點上。

所有被確定的街道必須至少被一臺掃雪機經過,才能完成清掃任務,完成任務后SM可以在原地停下,不必集合到某一點。掃雪機的行進是需要耗費油量的(即使掃雪機行駛的是已被掃凈的街道),因此掃雪機行進的總距離越小越好,你需要計算兩臺掃雪機完成任務的最小總行進距離。

?

{以上感謝鐸鐸大牛提供的翻譯}

?

解法:

首先從根節點出發找到一條最長的鏈,然后將這條鏈上路徑的長度len全部設為-len

再從根節點出發找到一條最長的連

樹中每條邊的長度之和*2-兩條鏈的長度之和就是答案。

?

貪心證明:顯然,畫畫圖就明白了

?

CODE

Program Two;//By_thispoet Constmaxn=300000; Varp,q,i,j,k,m,n,s,tmp,ans :Longint;pre,other,last,len :Array[0..maxn]of Longint;size,father,deal,res,kset :Array[0..maxn]of Longint;flag,v :Array[0..maxn]of Boolean;Procedure Dfs(i:Longint); var j,k:Longint; beginj:=last[i];while j<>0 dobegink:=other[j];if k<>father[i] thenbeginfather[k]:=i;if flag[k] then size[k]:=size[i]+len[j] elsesize[k]:=size[i]-len[j];Dfs(k);end;j:=pre[j];end;end;BEGINreadln(n,s);for i:=1 to n-1 dobeginreadln(p,q,m);inc(k);pre[k]:=last[p];last[p]:=k;other[k]:=q;len[k]:=m;inc(k);pre[k]:=last[q];last[q]:=k;other[k]:=p;len[k]:=m;inc(ans,m*2);end;fillchar(flag,sizeof(flag),1);size[s]:=0;Dfs(s);tmp:=1;for i:=2 to n doif size[i]>size[tmp] then tmp:=i;p:=size[tmp];while tmp<>s dobeginj:=last[tmp];while other[j]<>father[tmp] do j:=pre[j];flag[tmp]:=false;tmp:=father[tmp];end;Dfs(s);tmp:=1;for i:=2 to n doif size[i]>size[tmp] then tmp:=i;inc(p,size[tmp]);dec(ans,p);writeln(ans);END.

轉載于:https://www.cnblogs.com/Thispoet/archive/2011/09/11/2173636.html

總結

以上是生活随笔為你收集整理的POJ1849 Two——贪心——Pku1849的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。