码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1511 链式前向星+SPFA

时间:2018-04-07 12:43:52      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:max   ons   htm   ios   AC   div   stat   print   pac   

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int maxn=1000010,inf=1000000000;
long long ans;  
int e,to[maxn],next[maxn],begin[maxn],w[maxn];  
int e1,to1[maxn],next1[maxn],begin1[maxn],w1[maxn];  
int d[maxn],p[maxn],q[maxn*50];  
int m,n,f,l;  
void add(int x,int y,int z){  
     to[++e]=y;  
     next[e]=begin[x];  
     begin[x]=e;  
     w[e]=z;            
}  
void add1(int x,int y,int z){  
     to1[++e1]=y;  
     next1[e1]=begin1[x];  
     begin1[x]=e1;  
     w1[e1]=z;            
} 
int main(){
	int i,j,k,m,n;
	int t;
	scanf("%d",&t);
	while(t--){
	    int i,j,k,x,y,z;  
        scanf("%d%d",&n,&m);  
     	e=0;e1=0;  
     	for(i=1;i<=n;i++){begin[i]=0;begin1[i]=0;}   
     	for(i=1;i<=m;i++){  
        scanf("%d%d%d",&x,&y,&z);                    
        add(x,y,z);  
        add1(y,x,z);  
        }
		for(i=1;i<=n;i++){
		    d[i]=inf;
		    p[i]=0;
		}
		f=0;l=1;  
        d[1]=0;q[1]=1;p[1]=1;          
        while(f<l){  
            f++;  
            k=q[f];p[k]=0;              
            for(i=begin[k];i;i=next[i])  
                if(d[to[i]]>d[k]+w[i]){  
                    d[to[i]]=d[k]+w[i];  
                    if(!p[to[i]]){  
                        q[++l]=to[i];  
                        p[to[i]]=1;  
                    }                         
                }                
        }          
        ans=0;  
        for(i=1;i<=n;i++)ans+=d[i];  
          
        for(i=1;i<=n;i++){  
            d[i]=inf;  
            p[i]=0;  
        }      
        f=0;l=1;  
        d[1]=0;q[1]=1;p[1]=1;          
        while(f<l){  
            f++;  
            k=q[f];p[k]=0;        
            for(i=begin1[k];i;i=next1[i])  
                if(d[to1[i]]>d[k]+w1[i]){  
                    d[to1[i]]=d[k]+w1[i];  
                    if(!p[to1[i]]){  
                        q[++l]=to1[i];  
                        p[to1[i]]=1;  
                    }                         
                }                
        }          
        for(i=1;i<=n;i++)ans+=d[i];  
        printf("%I64d\n",ans);          
	}
	return 0;
}

POJ 1511 链式前向星+SPFA

标签:max   ons   htm   ios   AC   div   stat   print   pac   

原文地址:https://www.cnblogs.com/zhchoutai/p/8732544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!