贴个模板,POJ 1511

来源:互联网 发布:c语言转换汇编语言 编辑:程序博客网 时间:2024/06/03 21:47

N个点M条边,有向图,求1到其余各点的最短距离与各点到1的距离最短的路径总和。

N M 1E6

朴素必跪。。。

Dijkstra堆优化和SPFA应该都能过。

因为是有向图,求1到各点的距离,直接原图上跑SPFA。。

求各点回到1的距离,将边反转(from变to ,to 变from),在新图上再跑一遍SPFA。

8S的题,7S卡过,真尼玛2333333。。单纯的贴个SPFA的模板,以后说不定有用-- 。。

#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<vector>using namespace std;const int   maxn=1000055;const long long    inf=1000000005;bool Inq[maxn];long long   dis[maxn];int A[maxn],B[maxn],C[maxn];int   n,m;struct edge{    int   to;   long long    w;};vector<edge> G[maxn];void spfa(int   src){    for(int   i=0;i<maxn;i++)    {        dis[i]=inf;    }    dis[src]=0;    memset(Inq,0,sizeof(Inq));    queue<int > q;    Inq[src]=1;    q.push(src);    while(!q.empty())    {        int   cur=q.front();        q.pop();        Inq[cur]=0;        for(int   i=0;i<G[cur].size();i++)        {            edge& E=G[cur][i];            if(dis[E.to]>dis[cur]+E.w)            {                dis[E.to]=dis[cur]+E.w;                if(Inq[E.to]==0)                {                    q.push(E.to);                    Inq[E.to]=1;                }            }        }    }}int main(){  ios_base::sync_with_stdio(false);    int  t;    scanf("%d",&t);    while(t--)    {       scanf("%d%d",&n,&m);    for(int   i=0;i<=maxn;i++)    {        G[i].clear();    }    for(int  i=0;i<m;i++)    {        scanf("%I64d%I64d%I64d",&A[i],&B[i],&C[i]);        G[A[i]].push_back((edge) {B[i],C[i]});         //G1[to].push_back((edge) {from,w});    }    spfa(1);     long long  ans=0;    for(int   i=2;i<=n;i++)        {            ans+=dis[i];        }    for(int   i=0;i<=maxn;i++)    {        G[i].clear();    }     for(int  i=0;i<m;i++)    {      //  scanf("%I64d%I64d%I64d",&A[i],&B[i],&C[i]);        G[B[i]].push_back((edge) {A[i],C[i]});         //G1[to].push_back((edge) {from,w});    }    spfa(1);       for(int   i=2;i<=n;i++)        {            ans+=dis[i];        }       printf("%I64d\n",ans);    }    return 0;}


0 0
原创粉丝点击