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

最新文章

  1. UWP开发入门(二十二)——Storyboard和Animation
  2. Postgresql Jsonb字段内含数组属性的删除元素操作
  3. sublime text3 快捷方式汇总
  4. winform(容器、打印、对话框)
  5. NOIP2008普及组题解
  6. Android 用adb pull或push 拷贝手机文件到到电脑上,拷贝手机数据库到电脑上,拷贝电脑数据库到手机上
  7. XJOI网上同步测试DAY14 T3
  8. UAC下的程序权限提升
  9. vue-cli webpack在node环境下安装使用
  10. MyBatis开发中解决返回字段不全的问题
  11. appium常用方法
  12. 火星A+B(hdu1230)进制转化
  13. 播放一个wav文件
  14. 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)
  15. SQL语句小tips(持续更新)
  16. 记Git报错-Everything up-to-date
  17. Divide Two Integers leetcode java
  18. 麦子学院bootstrap实战项目官网,后台,jquery.singlePageNav.min.js ,wow.min.js,animate.css使用
  19. 23-吝啬的国度(vector+深搜)
  20. 20155236 2016-2017-2 《Java程序设计》第十周学习总结

热门文章

  1. [Angular] ViewChild &#39;read&#39; option
  2. 使用HttpClient测试SpringMVC的接口
  3. PS 如何制作环绕文字效果
  4. Win8.1应用开发之Bing Maps
  5. 【Excle数据透视表】如何重复显示行字段的项目标签
  6. MySQL性能优化的最佳20+条经验(转)
  7. flashplayer
  8. mongo 增
  9. 根域名服务器 根服务器一般指根域名服务器 (DNS)
  10. 自制的React同构脚手架