最短的旅程

2021-07-09 06:32:48 字數 1700 閱讀 6217

在byteland有n個城市(編號從1到n),它們之間通過雙向的道路相連。byteland的國王並不大方,所以,那裡只有n -1條道路,但是,它們的連線方式使得從任意城市都可以走到其他的任何城市。

一天,starhder到了編號為k的城市。他計畫從城市k開始,遊遍城市m1,m2,m3,……,mj(不一定要按這個順序旅遊),其中j個城市都是不同的,並且也與k不同。starhder—— 就像每乙個旅行家一樣,攜帶的錢總是有限的,所以,他要以最短的路程旅行完所有的城市(從城市k開始)。 於是,他請你幫助計算一下,旅遊完上述的城市最短需要多少路程。

輸入引數

第一行輸入兩個整數,即上文中的n和k,以乙個空格隔開。下面的n-1行每行描述一條路,每行輸入3個整數ai,bi,di,相鄰兩個數用乙個空格隔開(1<= ai,bi

<= n,1<= di

<= 1000),ai和bi是用道路直接相連的城市編號,di是這條道路的長度。 第n + 1行輸入乙個整數j,是starhder要旅遊的城市數(1<= j <= n - 1),接下來一行包含j個不同的整數,即m1,m2,……,mj,每兩個相鄰的整數用乙個空格隔開,表示starhder想要去的城市。(1<= mt

<=n,mt 不等於k)。

輸出引數

輸出只有一行,包含乙個整數:starhder旅遊的最短路程。

樣例輸入

4 2

1 2 1

4 2 2

2 3 3

2

1 3

樣例輸出

5

思路:題目中說n個節點總共有n-1條路,所以是乙個棵樹。先用floyd求出各節點之間的最短路徑,然後將不用去的節點去掉,之後就可以只用剩下的節點求出所要去的最短路徑。我用的是暴力搜尋,複雜度有點高。

#include #include #include #include using namespace std;

#define m 1050

#define inf 0xfffffff

int map[m][m],n,k,city;

bool go[m]; //go[i]表示去沒去過城市i

int ans;

void init() }

void floyd() //先求出各城市之間的最短路徑

void dfs(int st,int num,int sum) //用已知最短路徑的圖搜尋求出最小的路程

for(int j=1;j<=n;j++)

}} int main()

floyd();

scanf("%d",&city);

for(int i=0;i

最短路 旅程

題目描述 您曾經帶領著我,穿過我的白天的擁擠不堪的旅程,而到達了我的黃昏的孤寂之境。在通宵的寂靜裡,我等待著它的意義。神即將帶領一些人去他們的孤寂之境,由於這個世界的不穩定,地點之間的有向道路會不定期地毀壞,出於工作準備,神想知道在某些道路毀壞之後某兩點之間的最短路。就是給定乙個有向圖,現有兩個操作...

10 12模擬賽 旅程 最短路

神即將帶領一些人去他們的孤寂之境,由於這個世界的不穩定,地點之間的有向道路會不定期地毀壞,出於工作準備,神想知道在某些道路毀壞之後某兩點之間的最短路。就是給定乙個有向圖,現有兩個操作,操作 1 是刪除一條邊 一條邊可重複刪除 操作 2是詢問兩個點之間的最短路。第 1 行兩個正整數 n,m,分別表示圖...

使用者的旅程

使用者的旅程 1.收集使用者的要求 原始的要求 可以適應於典型的市場活動 銷售獲利 服務 保持客戶。要求的狀態 這時的設計 對應著使用者的某個原始要求,會分解成n個狀態。2.答覆要求 採用頭腦風暴 面對面複核等方式,以雙方都能夠理解的方式,確定每乙個要求的內容和功能。此時應當能夠整理出一些典型的案例...