lanqiao3516 景区导游(floyd)
This commit is contained in:
60
14lanqiao/test9-1.cpp
Normal file
60
14lanqiao/test9-1.cpp
Normal file
@@ -0,0 +1,60 @@
|
||||
// lanqiao3516 景区导游(floyd)
|
||||
#include<bits/stdc++.h>
|
||||
using namespace std;
|
||||
const int N = 8e3 + 10, INF = INT_MAX;
|
||||
|
||||
bool vis[N]; // 标记数组
|
||||
int d[N][N]; // 最段路数组
|
||||
int n, m;
|
||||
// floyd 求多源最短路 - 时间复杂度-O(n^3)
|
||||
void floyd(){
|
||||
// 枚举中转点
|
||||
for(int k = 1; k <= n; k++){
|
||||
// 枚举任意两点
|
||||
for(int i = 1; i <= n; i++){
|
||||
for(int j = 1; j <= n; j++){
|
||||
if(d[i][k] != INF && d[k][j] != INF){
|
||||
if(d[i][k] + d[k][j] < d[i][j]){
|
||||
d[i][j] = d[i][k] + d[k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
int main(){
|
||||
fill(d[0], d[0] + N * N, INF);
|
||||
cin >> n >> m;
|
||||
|
||||
for(int i = 1; i <= n - 1; i++){
|
||||
int u, v, w; cin >> u >> v >> w;
|
||||
d[u][v] = d[v][u] = w;
|
||||
}
|
||||
vector<int> p;
|
||||
for(int i = 1; i <= m; i++){
|
||||
int v; cin >> v;
|
||||
p.push_back(v);
|
||||
}
|
||||
floyd();
|
||||
vector<int> vec = p;
|
||||
for(int i = 0; i < p.size(); i++){
|
||||
vec.erase(vec.begin() + i);
|
||||
int ans = 0;
|
||||
for(int j = 0; j < vec.size() - 1; j++){
|
||||
int v = vec[j], u = vec[j+1];
|
||||
ans += d[u][v];
|
||||
}
|
||||
cout << ans << ' ';
|
||||
vec = p;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/* test sanples -> 10 7 13 14
|
||||
6 4
|
||||
1 2 1
|
||||
1 3 1
|
||||
3 4 2
|
||||
3 5 2
|
||||
4 6 3
|
||||
2 6 5 1
|
||||
*/
|
||||
Reference in New Issue
Block a user