題目說的很明確了,問點是否在最長路徑上,記錄最長次長以及最長轉移的位置。
怎麼判斷點在最長路徑上,只要最長次長和向上走三者中較大的兩個的和為最長路就能說明在最長路徑上。
**顯然好寫。
/*
knowledge : rubbish algorithm
work by :gym_nastics
time : o(ac)
*/#include#include#include#include#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const int n=1e6+6;
int read()
void print(int x)
int n,cnt,head[n];struct nodee[n];
void add_edge(int u,int v);head[u]=cnt;}
int max,d1[n],d2[n],c1[n];
void dfs1(int u,int fa) max=max(d1[u]+d2[u],max);return;
}int up[n];
void dfs2(int u,int fa)return;
}signed main() dfs1(0,-1);dfs2(0,-1);
for(int i=0;isort(com+1,com+4);
if(com[2]+com[3]==max) print(i),putchar('\n');
} return 0;
}
LOJ 10159 旅遊規劃 樹形DP
題目描述 首先是求樹中最長鏈的問題,只需遍歷一遍,更新每個點距離的最大值和次大值,列舉一遍,記下答案ans。如果此時暴搜的話,找出路徑為ans的邊上的點,是可以得出答案的,但會超時。我們可以根據記下的最大值以及次大值來找路徑,找出相加為ans的點,搜尋,如果搜到的子節點最大值為父節點最大值 1,那麼...
loj539 旅遊路線
考慮列舉加油的位置,當確定某次在第 i 個位置加油後,且下一次到 j 加油,那麼 i 到 j 必然會選擇不超過 c 條邊且最長的路徑,記作 d 如果能求出 d 再設 f 表示 q 元 恰好用完 從 i 出發的最長路,列舉 i 之後那一次加油點即可轉移,由於 q le n 因此這裡的複雜度為 o n ...
7 9 旅遊規劃
輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 500 是城市的個數,順便假設城市的編號為0 n 1 m是高速公路的條數 s是出發地的城市編號 d是目的地的城市編號。隨後的 m行中,每行給出一條高速公路的資訊,分別是 城市1 城市2 高速公路長度 收費額,中間用空格分開,數字...