不太清楚哪里错了,求调40分
查看原帖
不太清楚哪里错了,求调40分
819682
Exile_Code楼主2024/3/26 12:54
#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <math.h>
#include <functional>
#define ull             unsigned long long 
#define ll              long long 
#define pii             pair<ll ,ll>
#define cy              cout<<"YES"<<endl
#define cn              cout<<"NO"<<endl
#define forn(i,begin,end,add)	for(ll (i)=(begin);(i)<=(end);(i)+=(add))	//begin是i的起始,end是i的终止,add是每次加的大小
#define rforn(i,begin,end,sub)  for(ll (i)=(end);(i)>=(begin);(i)-=(sub))	//r是倒序遍历
#define vv              vector
#define inf32           INT32_MAX/2
#define inf64           INT64_MAX/2
#define LD              double
#define PI              acos(-1)
#define debug(a,b)		cout<<a<<b
#define eps				1e-12
const int N = 4e5 + 100;
const int mod = 998244353;
ll T;
int n;
vv<vv<pii>>tree;
void dj(int s, vv<ll>&d) {

    d[s] = 0;
    priority_queue<pii>q;

    q.push({ 0,s });
    vv<int>flag(n + 1);
    while (q.size()) {
        int nd = q.top().second;
        q.pop();
        if (flag[nd])
            continue;
        for (auto a : tree[nd]) {

            if (d[a.first] > d[nd] + a.second) {
                d[a.first] = d[nd] + a.second;
                q.push({ -d[a.first],a.first });

            }
        }
    }

}
void solve() {
    int p; cin >> p;
    cin >> n; 

    int m; cin >> m;
    tree.resize(n + 1);
    map<int, int>mp;
    forn(i, 1, p, 1) {
        int a; cin >> a;
        mp[a]++;
    }
    forn(i, 1, m, 1) {
        int a, b; cin >> a >> b;
        int w; cin >> w;
        tree[a].push_back({ b,w});
        tree[b].push_back({ a,w});
    }

    ll ans = inf64;
    
    forn(i,1,n,1) {
        vv<ll>d(n + 1, inf64);
        dj(i, d);
        ll sum = 0;
        for (auto ret : mp) {
            if(d[ret.first]!=inf64)
                sum += d[ret.first];
        }
        ans = min(ans, sum);
    }
 
    cout << ans << endl;
}
int main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    T = 1;
    //cin >> T;
    while(T--)
        solve();
    return 0;

}
2024/3/26 12:54
加载中...