0分求调,玄关
查看原帖
0分求调,玄关
758513
Kyleshao楼主2025/6/28 09:32

link

#include <iostream>
using namespace std;
int dis[200005];
bool vis[200005];
struct node
{
    int y,z;
};
struct node2
{
    int val,id;
    bool operator>(const node2& y)    const {return val>y.val;}
};
vector<node> a[200005];
priority_queue<node2,vector<node2>,greater<node2>> pq;
void priority_queue_dijstra()
{
    while (!pq.empty())
    {
        int id=pq.top().id;
        pq.pop();
        if (vis[id])    continue;
        vis[id]=true;
        for (int i=0;i<a[id].size();i++)
        {
            int y=a[id][i].y,z=a[id][i].z;
            if (dis[y]>dis[id]+z)
            {
                pq.push(node2{dis[y],y});
                dis[y]=dis[id]+z;
            }
        }
    }
}
int main()
{
    int n,m,s,q;
    cin>>n>>m>>s>>q;
    for (int i=1;i<=n;i++)
    {
        dis[i]=1e9;
    }
    dis[s]=0;
    for (int i=1;i<=m;i++)
    {
        int xi,yi,zi;
        cin>>xi>>yi>>zi;
        a[xi].push_back(node{yi,zi});
        a[yi].push_back(node{xi,zi});
    }
    pq.push(node2{0,s});
    priority_queue_dijstra();
    for (int i=1;i<=q;i++)
    {
        int h;
        cin>>h;
        cout<<dis[h]<<endl;
    }
}
2025/6/28 09:32
加载中...