TLE/WA in Subtask #1 求调
查看原帖
TLE/WA in Subtask #1 求调
916767
Luogu_916767楼主2025/7/22 10:25
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int INF = 1e9;
int t;
int n,m,k;
int u,v,w;
vector<pair<int, int>> a[100001];
int p[100001];
int f[100001];
bool vis[100001];
int x;

int dij(int start){
    memset(f,0x3f,sizeof(f));
    memset(vis,0,sizeof(vis));
    priority_queue<pair<int,int>, vector<pair<int,int> >,greater<pair<int,int> > >q;
    f[start] = 0;
    q.push({0, start});
    while(!q.empty()){
        auto [dist, u] = q.top();
        q.pop();
        if(u != start && p[u]){
            return dist;
        }
        if(vis[u] || dist > f[u]) continue;
        vis[u] = true;
        for(auto [v, w] : a[u]){
            if(f[v] > f[u] + w){
                f[v] = f[u] + w;
                q.push({f[v], v});
            }
        }
    }
    return INF;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>t;
    while(t -- ){
        for(int i = 1; i <= n; i ++ ){
            a[i].clear();
        }
        memset(p, 0, sizeof(p));
        cin>>n>>m>>k;
        for(int i = 1; i <= m; i ++ ){
            cin>>u>>v>>w;
            a[u].push_back({v, w});
        }
        for(int i = 1; i <= k; i ++ ){
            cin>>x;
            p[x] = 1;
        }
        int ans = INF;
        for(int i = 1; i <= n; i ++ ){
            if(p[i]){
                int dist = dij(i);
                ans = min(ans, dist);
            }
        }
        cout<<ans<<"\n";
    }
    return 0;
}
2025/7/22 10:25
加载中...