提交时间:2024-06-03 21:56:55

运行 ID: 150450

#include <bits/stdc++.h> using namespace std; struct str { long long l; int u, v; bool operator < (const str &o) const { return l<o.l; } } s[1001]; struct str2 { int v, w; }; int p[50001]; vector<str2> g[1001]; bool vis[1001]; long long ans; int x, y; void dfs(int u, int f, int mi) { if(u == y) { ans = mi; return; } if(vis[u]) { return; } vis[u]=true; for (int i = 0; i < g[u].size(); i++) { int v = g[u][i].v, w = g[u][i].w; dfs(v, u, min(mi, w)); } vis[u]=false; } void init(int n) { for(int i = 1; i<=n; i++) { p[i]=i; } } int find(int x) { if(p[x]==x) { return x; } return p[x]=find(p[x]); } void merge(int x, int y) { p[find(y)]=find(x); } void bdfs(int m, int n) { init(n); for(int i = m; i>=1; i--) { if(find(s[i].u)==find(s[i].v)) { continue; } merge(s[i].u, s[i].v); g[s[i].u].push_back({s[i].v, s[i].l}); g[s[i].v].push_back({s[i].u, s[i].l}); } } int main() { vector<int> gg; int n, k, m; cin >> n >> k >> m; for(int i = 1; i<=k; i++) { int pp; cin >> pp; gg.push_back(pp); } for(int i = 1; i<=m; i++) { cin >> s[i].u >> s[i].v >> s[i].l; } sort(s+1, s+m+1); bdfs(m, n); long long minn = 0x7f7f7f, i; for(x = 1; x<=n; x++) { long long sum = 0; for(int yy : gg) { ans=0x7f7f7f; y=yy; dfs(x, 0, 0x7f7f7f); if(ans==0x7f7f7f) { ans=0; } sum+=ans; } if(minn>sum) { i=x; minn=sum; } } cout << i << endl; return 0; }