zoukankan      html  css  js  c++  java
  • CF938D Buy a Ticket dijkstra

    考试T1,建一个反图跑一个最短路就好了~

    code:

    #include <bits/stdc++.h> 
    #define ll long long  
    #define N 200002 
    #define M 600009 
    #define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout)  
    using namespace std; 
    int n,m,edges,s,t;         
    ll val[M], d[N];     
    int hd[N],to[M],nex[M],done[N];        
    struct Node 
    {
        int u; 
    	ll dis;  
        Node(int u=0,ll dis=0):u(u),dis(dis){}  
        bool operator<(Node b) const { return b.dis<dis; }       
    };      
    priority_queue<Node>q;   
    void addedge(int u,int v,ll c) 
    {
    	nex[++edges]=hd[u],hd[u]=edges,to[edges]=v,val[edges]=c;    
    }
    void dijkstra() 
    {
    	memset(d,0x3f,sizeof(d));    
    	d[s]=0ll;   
    	q.push(Node(s,0ll));   
    	while(!q.empty()) 
    	{ 
    		Node e=q.top(); q.pop();   
    		int u=e.u;  
    		if(done[u]) continue;  
    		done[u]=1;   
    		for(int i=hd[u];i;i=nex[i]) 
    		{ 
    			int v=to[i];    
    			if(d[u]+val[i]<d[v]) 
    			{
    				d[v]=d[u]+val[i];   
    				q.push(Node(v, d[v]));    
    			}
    		}
    	}
    }
    int main() 
    { 
    	// setIO("movie"); 
    	int i,j;   
    	scanf("%d%d",&n,&m);              
    	for(i=1;i<=m;++i) 
    	{         
    		int u,v; 
    		ll c; 
    		scanf("%d%d%lld",&u,&v,&c);  
    		if(u==v) continue;   
    		addedge(u,v,1ll*2*c), addedge(v,u,1ll*2*c);    
    	}   
    	s=0;         
    	for(i=1;i<=n;++i)  
    	{     
    		ll w; 
    		scanf("%lld",&w),addedge(s,i,1ll*w);       
    	}   
    	dijkstra(); 
    	for(i=1;i<=n;++i) printf("%lld ",d[i]);         
    	return 0;    
    }
    

      

  • 相关阅读:
    C#博客记录二
    C#博客记录一
    label语句
    css选择器
    关于访问对象属性的小问题
    特殊符号unicode编码
    不换行
    正则表达式中的exec()方法
    正则表达式中两种定义方式中的反斜杠
    js删除对象数组
  • 原文地址:https://www.cnblogs.com/guangheli/p/11671151.html
Copyright © 2011-2022 走看看