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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ5906 传送门

發(fā)布時(shí)間:2024/10/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ5906 传送门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

8102年,Normalgod在GLaDOS的幫助下,研制出了傳送槍。但GLaDOS想把傳送槍據(jù)為己有,于是把Normalgod扔進(jìn)了一間實(shí)驗(yàn)室。這間實(shí)驗(yàn)室是一棵有n個(gè)節(jié)點(diǎn)的樹。現(xiàn)在Normalgod在一號(hào)節(jié)點(diǎn),出口也在一號(hào)節(jié)點(diǎn),但為了打開它,必須經(jīng)過每一個(gè)節(jié)點(diǎn)按下每個(gè)節(jié)點(diǎn)的開關(guān),出口才能打開。GLaDOS為了殺死Normalgod,開始在實(shí)驗(yàn)室里釋放毒氣,因此Normalgod必須盡快逃出這間實(shí)驗(yàn)室。
? ? ? ? ? ??當(dāng)然,Normalgod手中的傳送槍是可以使用的。傳送槍可以發(fā)射出兩個(gè)顏色不同的傳送門。Normalgod可以從其中一個(gè)傳送到另一個(gè)。盡管傳送槍可以在視野范圍內(nèi)的任何一個(gè)經(jīng)過特殊處理的表面打開一扇傳送門,但這間實(shí)驗(yàn)室的設(shè)計(jì)使得Normalgod只能在他所處的房間內(nèi)打開一個(gè)傳送門。 在已經(jīng)存在了一個(gè)同顏色的傳送門時(shí),打開新的傳送門會(huì)使與它同顏色的舊門消失。傳送和打開傳送門所需時(shí)間為0。
? ? ? ? ? ? ?顯然,利用傳送槍會(huì)讓Normalgod更快解決謎題,可Normalgod死在了按下最后一個(gè)按鈕的路上。盡管如此,GLaDOS還是很想知道到底Normalgod最快能用多久逃出去,這對(duì)她的實(shí)驗(yàn)室設(shè)計(jì)方法論有重要的指導(dǎo)作用。作為GLaDOS的算法模塊,你要完成這個(gè)任務(wù)。本題時(shí)限為2000ms

Input

第一行一個(gè)整數(shù)n。之后n-1行,每行三個(gè)整數(shù)ui,vi,ai ,表示有一條從ui 連向vi ,花費(fèi)時(shí)間為ai 的通道。

Output

一行一個(gè)數(shù)T,表示最小的脫逃時(shí)間。

Sample Input

5 1 2 2 2 3 3 2 4 5 1 5 1

Sample Output

13樣例說明 1--> open1--> 5--> open2--> use(1)--> 2--> 3--> open2--> use(1)--> 2--> 4--> open2--> use(1)--> exit

Data Constraint

Solution 

?

  我們可以采用動(dòng)態(tài)規(guī)劃來求解?dp[i][0/1]

  0表示在i點(diǎn)及i點(diǎn)兒子設(shè)傳送門所能得到的最大總和

  1 表示不在i點(diǎn)及i點(diǎn)兒子設(shè)傳送門所能得到的最大總和

  首先,對(duì)于dp[i][1]的情況,一定存在i點(diǎn)的祖先中有傳送門,這樣才能使結(jié)果更優(yōu)。所以對(duì)于他的每一個(gè)兒子都能跳回到他的祖先。但實(shí)際上只有使一個(gè)兒子跳回祖先時(shí),才能保證fa->i的邊經(jīng)過兩次。

  否則轉(zhuǎn)化為dp[i][0]的情況。則我們要使選的兒子最優(yōu)。

  dp[i][1]=max(dp[vi][1]+wi);

  其次,對(duì)于dp[i][0]的情況,在每個(gè)兒子中設(shè)立傳送門并不會(huì)影響到其他兒子,因?yàn)榭偰軓膬鹤踊氐絠時(shí)再在i重設(shè)傳送門。所以我們就取每個(gè)兒子設(shè)與不設(shè)的最優(yōu)值之和。

  dp[i][0]=max(dp[vi][0],dp[vi][1]+wi);

?

1 #include <cstdio> 2 #define N 1000007 3 #define LL long long 4 using namespace std; 5 struct arr { 6 long long w; 7 int x,y,next; 8 }; 9 arr edge[N*2]; 10 int ls[N],n; 11 LL f[N][2],ans; 12 bool p[N]; 13 14 LL max(LL x,LL y){ 15 if (x>y) return x; 16 return y; 17 } 18 19 int dfs(int s){ 20 int i=ls[s]; 21 while (i!=0){ 22 int d=edge[i].y; 23 if (p[d]){ 24 p[d]=false; 25 dfs(d); 26 f[s][1]=max(f[s][1],f[d][1]+edge[i].w); 27 f[s][0]+=max(f[d][0],f[d][1]+edge[i].w); 28 } 29 i=edge[i].next; 30 } 31 } 32 33 int add(int x,int y,LL w,int e){ 34 edge[e].x=x; edge[e].y=y; edge[e].w=w; 35 edge[e].next=ls[edge[e].x]; ls[edge[e].x]=e; 36 edge[--e].x=y; edge[e].y=x; edge[e].w=w; 37 edge[e].next=ls[edge[e].x]; ls[edge[e].x]=e; 38 } 39 40 int main() 41 { 42 scanf("%d",&n); 43 ls[1]=1; 44 for (int i=1;i<n;i++){ 45 int x,y; 46 LL w; 47 scanf("%d%d%lld",&x,&y,&w); 48 add(x,y,w,i*2); 49 ans+=w*2; 50 } 51 for (int i=1;i<=n;i++) 52 p[i]=true; 53 p[1]=false; 54 dfs(1); 55 ans-=max(f[1][1],f[1][0]); 56 printf("%lld\n",ans); 57 } View Code

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/Tokisaki-Kurumi/p/9800966.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的JZOJ5906 传送门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。