最短路径+堆

来源:互联网 发布:淘宝店铺怎么删除分类 编辑:程序博客网 时间:2024/06/01 22:42
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>using namespace std;struct Node{    int k;    int w;};bool operator <(const Node &a,const Node &b){    return a.w>b.w;}priority_queue<Node> pq;bool bused[30010]={0};vector<vector<Node> > v;const unsigned int inf=1000000000;int main(){    int n,m,a,b,c;    int i,j;    Node p;    scanf("%d%d",&n,&m);    v.clear();    v.resize(n+1);//设置容器大小    memset(bused,0,sizeof(bused));    for(i=1;i<=m;i++)    {        scanf("%d%d%d",&a,&b,&c);        p.k=b;        p.w=c;        v[a].push_back(p);    }    p.k=1;    p.w=0;    pq.push(p);    while(!pq.empty())    {        p=pq.top();        pq.pop();        if(bused[p.k])            continue;        bused[p.k]=true;        if(p.k==n)            break;        for(i=0,j=v[p.k].size();i<j;i++)        {            Node q;            q.k=v[p.k][i].k;            if(bused[q.k]) continue;            q.w=p.w+v[p.k][i].w;            pq.push(q);        }    }    printf("%d",p.w);    return 0;}

原创粉丝点击