dijkstra模板

来源:互联网 发布:java syslog4j 编辑:程序博客网 时间:2024/05/21 02:50

用dijkstra算法时,求最短路,不能存在负权边;求最长路时,不能存在正权边(((贪心思想;

代码:

struct edge{    int to,val,next;}e[maxm];int vis[maxn],head[maxn],in[maxn];ll dis[maxn];int n,m,cnt;void add(int u,int v,int val){    e[cnt] = (edge){v,val,head[u]};    head[u] = cnt++;}priority_queue<pii> pq;void dijkstra(int s){    while(!pq.empty())        pq.pop();    pq.push(make_pair(0,s));    for(int i = 0;i<=n+1;i++)        vis[i] = 0;    while(!pq.empty())    {        pii p = pq.top();        int u = p.second;        //cout<<head[u]<<endl;        pq.pop();        if(vis[u])            continue;        vis[u] = 1;        for(int i = head[u];i!=-1;i = e[i].next)        {            //cout<<i<<endl;            int v = e[i].to;            if(!vis[v])            {                if(dis[v]<dis[u]+e[i].val)                {                    dis[v] = dis[u]+e[i].val;                   // cout<<dis[v]<<endl;                    pq.push(make_pair(dis[v],v));                }            }        }    }}