時間限制: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可以看到題目並不難,首先儲存所有路徑長度的和ans,找到一條1到所有點的最短路徑長度最大的,最後的答案就是ans的二倍再減去這條最大的路徑長度。1 2 1
1 3 1
深搜+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...