zoukankan      html  css  js  c++  java
  • [BJWC2012]冻结

    [BJWC2012]冻结

    luogu
    BZOJ
    分层图最短路,层与层之间连半边权边

    #include<bits/stdc++.h>
    using namespace std;
    const int _=5000;
    int re(){
    	int x=0,w=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    	return x*w;
    }
    int n,m,k,cnt,ans=1e9;
    int h[_],d[_];
    bool vis[_];
    struct node{int id,d;};
    struct edge{int to,next,w;}e[400000];
    bool operator <(node a,node b){return a.d>b.d;}
    priority_queue<node>q;
    void link(int u,int v,int w){
    	e[++cnt]=(edge){v,h[u],w};h[u]=cnt;
    }
    void dij(){
    	memset(d,63,sizeof(d));
    	d[1]=0;q.push((node){1,0});
    	while(!q.empty()){
    		int u=q.top().id;q.pop();vis[u]=1;
    		for(int i=h[u];i;i=e[i].next){
    			int v=e[i].to;
    			if(d[v]>d[u]+e[i].w){
    				d[v]=d[u]+e[i].w;
    				if(!vis[v])q.push((node){v,d[v]});
    			}
    		}
    	}
    }
    int main(){
    	n=re(),m=re(),k=re();
    	while(m--){
    		int a=re(),b=re(),c=re();
    		link(a,b,c);link(b,a,c);
    		for(int i=1;i<=k;i++){
    			link(i*n+a,i*n+b,c);
    			link(i*n+b,i*n+a,c);
    			link((i-1)*n+a,i*n+b,c>>1);
    			link((i-1)*n+b,i*n+a,c>>1);
    		}
    	}
    	dij();
    	for(int i=1;i<=k+1;i++)
    		ans=min(ans,d[i*n]);
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    01背包
    manacher马拉车算法
    盒子放球的DP
    Children’s Queue
    抽象类_作为接口
    斯特林数
    欧拉路HDU3018
    2019 SDN上机第三次作业
    第05组 Alpha冲刺(2/4)
    Alpha冲刺(1/4)
  • 原文地址:https://www.cnblogs.com/sdzwyq/p/9902033.html
Copyright © 2011-2022 走看看