• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 100,  comments - 15,  trackbacks - 0
            一遍SPFA求去的最短路徑,把圖的邊逆向,再一遍SPFA,求出回來的最短路徑...
            SPFA其實是Bellman-Ford使用隊列的優化

              1#include<iostream>
              2#include<queue>
              3using namespace std;
              4#define INF 2147483647   //2,147,483,647
              5#define MAXP 1000000    //1,000,000
              6#define MAXSUM 1000000000  //1,000,000,000
              7
              8struct Edge
              9{
             10    //int src;
             11    int vertex;
             12    int weight;
             13    Edge *next;
             14}
            ;
             15
             16Edge edge[MAXP*2+1];
             17Edge *go[MAXP+1];
             18Edge *back[MAXP+1];
             19int dis[MAXP+1];
             20bool flag[MAXP+1];  //false denote that the vertex is not in the queue
             21
             22void creatlist(int vn,int en)
             23{
             24    int s,d,w,i,j;
             25    for(i=1;i<=vn;i++)
             26    {
             27        go[i]=NULL;
             28        back[i]=NULL;
             29        flag[i]=false;  
             30    }

             31    for(i=1,j=1;i<=en;i++)
             32    {
             33        scanf("%d%d%d",&s,&d,&w);
             34        edge[j].vertex=d;
             35        edge[j].weight=w;
             36        edge[j].next=go[s];
             37        go[s]=&edge[j++];
             38        
             39        edge[j].vertex=s;
             40        edge[j].weight=w;
             41        edge[j].next=back[d];
             42        back[d]=&edge[j++];
             43    }

             44}

             45
             46void spfa(Edge *adjlist[],int vn,int src)
             47{
             48    int i,u,v,tmp;
             49    Edge *p;
             50    queue<int> Queue;
             51    for(i=1;i<=vn;i++)
             52        dis[i]=INF;
             53    dis[src]=0;
             54    Queue.push(src);
             55    while(!Queue.empty())
             56    {
             57        u=Queue.front();
             58        Queue.pop();
             59        flag[u]=false;
             60        p=adjlist[u];
             61        while(p!=NULL)
             62        {
             63            tmp=dis[u]+p->weight;
             64            
             65            v=p->vertex;
             66            if(dis[v] > tmp)
             67            {
             68                dis[v]=tmp;
             69                if(flag[v]==false)
             70                {
             71                    Queue.push(v);
             72                    flag[v]=true;
             73                }

             74            }

             75            /*
             76            if(dis[p->vertex] > tmp)
             77            {
             78                dis[p->vertex]=tmp;
             79                if(flag[p->vertex]==false)
             80                {
             81                    Queue.push(p->vertex);
             82                    flag[p->vertex]=true;
             83                }
             84            }*/

             85            p=p->next;
             86        }

             87    }

             88}

             89
             90int main()
             91{
             92    int n,p,q,i;
             93    __int64 sum;
             94    scanf("%d",&n);
             95    while(n--)
             96    {
             97        scanf("%d%d",&p,&q);
             98        creatlist(p,q);
             99        sum=0;
            100        spfa(go,p,1);
            101        for(i=1;i<=p;i++)
            102            sum+=dis[i];
            103        spfa(back,p,1);
            104        for(i=1;i<=p;i++)
            105            sum+=dis[i];
            106        printf("%I64d\n",sum);
            107    }

            108    return 0;
            109}
            posted on 2009-04-27 01:31 wyiu 閱讀(136) 評論(0)  編輯 收藏 引用 所屬分類: POJ
            久久国产精品偷99| 麻豆精品久久久一区二区| 少妇人妻综合久久中文字幕| 国产精品久久久久a影院| 伊人久久大香线焦AV综合影院| 久久午夜无码鲁丝片| 99精品伊人久久久大香线蕉| 久久人人添人人爽添人人片牛牛| 久久精品国产清高在天天线| 久久AⅤ人妻少妇嫩草影院| 久久综合九色综合网站| 欧洲性大片xxxxx久久久| 欧美一区二区三区久久综| 久久精品国产精品亚洲人人 | 久久久久人妻一区精品色| 亚洲精品高清久久| 色诱久久久久综合网ywww | 99久久国产亚洲高清观看2024 | 一本一本久久A久久综合精品| 久久综合综合久久狠狠狠97色88| 狠狠色丁香婷婷久久综合| 国产成人精品久久亚洲| 久久精品国产99久久无毒不卡| 久久精品免费全国观看国产| 9久久9久久精品| 97久久国产亚洲精品超碰热| 亚洲欧美伊人久久综合一区二区 | 97精品伊人久久大香线蕉app| 欧美精品九九99久久在观看| 久久亚洲AV无码西西人体| 亚洲国产精品久久久久婷婷软件| 国产精品一久久香蕉国产线看观看| 婷婷国产天堂久久综合五月| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久久久亚洲AV成人网| 亚洲精品高清国产一久久| 久久综合九色综合欧美狠狠| 88久久精品无码一区二区毛片 | 亚洲第一永久AV网站久久精品男人的天堂AV| 国产亚洲综合久久系列| 99久久久国产精品免费无卡顿|