zoukankan      html  css  js  c++  java
  • POJ 1511 链式前向星+SPFA

    #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
    ",ans);          
    	}
    	return 0;
    }

  • 相关阅读:
    聊天程序的简单实现
    UNIX网络编程 环境搭建
    缓冲区 cin() getline() getchar()
    Django ——中间件
    【Day41】Python之路——AJAX
    WEB框架
    Django的url别名功能的使用
    基于Ajax和forms组件实现注册功能
    验证码 --- 总结
    Win7和win10下python3和python2同时安装并解决pip共存问题
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8732544.html
Copyright © 2011-2022 走看看