w市的交通規劃出現了重大問題,市**下決心在全市的各大交通路口安排交通疏導員來疏導密集的車流。但由於人員不足,w市市長決定只在最需要安排人員的路口安放人員。具體說來,w市的交通網路十分簡單,它包括n個交叉路口和n-1條街道,任意一條街道連線兩個交叉路口,並且任意兩個交叉路口之間都存在一條路徑互相連線。經過長期調查結果顯示如果乙個交叉路口位於w市交通網的最長路徑上,那麼這個路口必然擁擠不堪,所謂最長路徑定義為某條路徑p=(v1,v2,v3…vk),路徑經過的路口各不相同且城市中不存在長度》k的路徑(因此可能存在著不唯一的最長路徑)。因此w市市長希望知道有哪些路口位於城市交通網的最長路徑之上。
第一行包括乙個整數n。
之後的n-1行每行包括兩個整數u, v表示編號為u和v的路口之間存在著一條街道(注意:路口被依次編號為0到n-1)
輸出包括若干行,每行包括乙個整數——某個位於最長路上路口的編號。
為了確保解唯一,我們規定位於所有最長路上的路口按編號順序從小到大輸出。
100 1
0 20 4
0 60 7
1 32 5
4 86 901
2345
689【樣例解釋】
這裡存在著若干條最長路徑,其中的兩條是3-1-0-2-5與8-4-0-6-9,他們的長度都是5,但是不存在長度》5的路徑且所有最長路徑都不包括路口7,所以答案中沒有7。
【資料範圍】
對於50%的資料保證n<=1000
對於100%的資料保證n<=200000
#include #include #define maxn 200005
using namespace std;
int head[maxn],cnt,f1[maxn],f2[maxn],ans,flag[maxn];
struct fdfdfde[maxn<<1];
void addedge(int x,int y)
void dfslen(int x,int pre)
ans=max(ans,f1[x]+f2[x]);
}void work(int x,int pre,int len)
}void dfs(int x,int pre)
}int main()
return 0;
}
BJ模擬 路徑規劃 樹的直徑
題目描述 給定一棵有權無根樹,求一條路徑滿足路徑上邊權的最小值與路徑邊權之和的乘積盡量大,輸出最大乘積。1 n 300000 1 n 300000 解題思路 思路肯定是將邊從大到小加入,這樣就是用找到經過這條邊的最長鏈了。那如何找經過這條邊的最長鏈呢?設這條邊連線的兩個聯通塊為s,t s,t 其塊內...
7 9 旅遊規劃
輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 500 是城市的個數,順便假設城市的編號為0 n 1 m是高速公路的條數 s是出發地的城市編號 d是目的地的城市編號。隨後的 m行中,每行給出一條高速公路的資訊,分別是 城市1 城市2 高速公路長度 收費額,中間用空格分開,數字...
7 9 旅遊規劃
有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 500 是城市...