Initial commit: C++ courseware
This commit is contained in:
commit
4a4ee7c287
1789 files changed
+373489
No files matched your search
@@ -0,0 +1,29 @@
|
||||
// P6464 传送门。原图 Floyd 一次,独立枚举一对零边。
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
using ll = long long;
|
||||
int main() {
|
||||
ios::sync_with_stdio(false); cin.tie(nullptr);
|
||||
int n, m; if (!(cin >> n >> m)) return 0;
|
||||
const ll INF = 1LL << 60;
|
||||
vector<vector<ll>> d(n, vector<ll>(n, INF));
|
||||
for (int i = 0; i < n; ++i) d[i][i] = 0;
|
||||
for (int e = 0, u, v; e < m; ++e) {
|
||||
ll w; cin >> u >> v >> w; --u; --v;
|
||||
d[u][v] = d[v][u] = min(d[u][v], w);
|
||||
}
|
||||
for (int k = 0; k < n; ++k)
|
||||
for (int i = 0; i < n; ++i)
|
||||
for (int j = 0; j < n; ++j)
|
||||
if (d[i][k] != INF && d[k][j] != INF)
|
||||
d[i][j] = min(d[i][j], d[i][k]+d[k][j]);
|
||||
ll ans = 0;
|
||||
for (int i = 0; i < n; ++i) for (int j = i+1; j < n; ++j) ans += d[i][j];
|
||||
for (int u = 0; u < n; ++u) for (int v = u+1; v < n; ++v) {
|
||||
ll sum = 0;
|
||||
for (int i = 0; i < n; ++i) for (int j = i+1; j < n; ++j)
|
||||
sum += min({d[i][j], d[i][u]+d[v][j], d[i][v]+d[u][j]});
|
||||
ans = min(ans, sum);
|
||||
}
|
||||
cout << ans << '\n';
|
||||
}
|
||||
Reference in new issue
Block a user