牛客網 旅行商問題 路徑問題

2021-09-12 21:08:13 字數 1674 閱讀 9280

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

旅行商來到了乙個新的國家,這個國家有n個城市,他們直接由n-1條道路相連線,每條道路的長度不盡相同

旅行商現在在1號城市,若他要每乙個城市都遊覽一遍,他需要行走的最短路程是多少?

第一行乙個數n (50000>n>1)

代表城市個數

之後n-1行

每行三個數x y z

代表從x到y的距離為z

輸出最小距離

3

1 2 1

1 3 1

可以看到題目並不難,首先儲存所有路徑長度的和ans,找到一條1到所有點的最短路徑長度最大的,最後的答案就是ans的二倍再減去這條最大的路徑長度。

深搜+vector:

#include using namespace std;

struct edge ;

int vis[50005];

long long ans, max_;

vector a[50005];

void dfs(int s, long long dis)

for (int i = 0; i < len; i++)

}}int main() );

a[v].push_back((edge));

ans += w;

}dfs(1, 0);

printf("%lld\n", (ans << 1) - max_);

}

深搜+鄰接表:

#include using namespace std;

struct edge e[100005];

int cnt = 0, f[50005];

long long ans, max_;

void add(int u, int v, int w) ;

f[u] = cnt;

}void dfs(int s, int t, long long dis)

}int main()

dfs(1, 0, 0);

printf("%lld\n", (ans << 1) - max_);

return 0;

}

spfa:

#include using namespace std;

struct edge e[100005];

long long ans, max_, dis[50005];

int cnt = 0, f[50005], vis[50005];

void add(int u, int v, int w) ;

f[u] = cnt;

}void spfa(int s) }}

}}int main()

spfa(1);

for (int i = 2; i <= n; i++)

max_ = max(max_, dis[i]);

printf("%lld\n", (ans << 1) - max_);

return 0;

}

牛客網 旅行商問題 堆優化dijstr

旅行商來到了乙個新的國家,這個國家有n個城市,他們直接由n 1條道路相連線,每條道路的長度不盡相同 旅行商現在在1號城市,若他要每乙個城市都遊覽一遍,他需要行走的最短路程是多少?題解 城市很多,樸素地dijstra 存不下圖,用堆優化的dij 然後就是每個城市都走還要求最短路程 那就把最長的的一段路...

旅行商問題

旅行商問題 乙個商人從城市a出發,訪問bcde等城市各一次最後回到a,問行程如何使得路程或費用最低。這是個np 非多項式可解,但一般驗證容易 問題,假設中間有4個城市,那麼全排列為4!24種,沒有很好的演算法,基本只能窮舉了。class vertex 4 public class lianxi pu...

旅行商問題

一銷售商從n個城市中的某一城市出發,不重複地走完其餘n 1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。對每個測試例,第1行有兩個整數 n 4 n 10 和m 4 m 20 n是結點數,m是邊數。接下來m行,描述邊的關係,每行3個整數 i,j le...