bzoj 2662: [BeiJing wc2012]冻结
2017-09-26 21:43
323 查看
题意:
能开挂的最短路。题解:
随便spfa保存下冻结了多少次就可以了。code:
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<queue> #include<algorithm> using namespace std; struct edge{ int y,c,next; }a[2010];int last[55],len=0; void ins(int x,int y,int c) { a[++len].y=y;a[len].c=c; a[len].next=last[x];last[x]=len; } int n,m,K; struct node{ int x,k; }; queue <node> q; bool u[55][55]; int dis[55][55]; void spfa() { node t;t.x=1;t.k=0; memset(u,false,sizeof(u)); memset(dis,63,sizeof(dis)); u[1][0]=true;dis[1][0]=0; q.push(t); while(!q.empty()) { t=q.front();q.pop(); int x=t.x,k=t.k; u[x][k]=false; for(int i=last[x];i;i=a[i].next) { int y=a[i].y; if(k<K) if(dis[y][k+1]>dis[x][k]+a[i].c/2) { dis[y][k+1]=dis[x][k]+a[i].c/2; if(!u[y][k+1]) { u[y][k+1]=true; node tmp;tmp.x=y;tmp.k=k+1; q.push(tmp); } } if(dis[y][k]>dis[x][k]+a[i].c) { dis[y][k]=dis[x][k]+a[i].c; if(!u[y][k]) { u[y][k]=true; node tmp;tmp.x=y;tmp.k=k; q.push(tmp); } } } } } int main() { scanf("%d %d %d",&n,&m,&K); for(int i=1;i<=m;i++) { int x,y,c;scanf("%d %d %d",&x,&y,&c); ins(x,y,c);ins(y,x,c); } spfa(); int ans=(1<<28); for(int i=0;i<=K;i++) ans=min(ans,dis [i]); printf("%d",ans); }
相关文章推荐
- bzoj 2662: [BeiJing wc2012]冻结
- bzoj2662: [BeiJing wc2012]冻结
- BZOJ2662: [BeiJing wc2012]冻结 spfa+分层图
- bzoj 2662: [BeiJing wc2012]冻结【分层图+spfa】
- BZOJ2662: [BeiJing wc2012]冻结
- BZOJ2662: [BeiJing wc2012]冻结
- BZOJ 2662: [BeiJing wc2012]冻结(最短路)
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
- bzoj 2662: [BeiJing wc2012]冻结 分层图最短路
- BZOJ2662: [BeiJing wc2012]冻结
- bzoj 2662: [BeiJing wc2012]冻结
- BZOJ 2662: [BeiJing wc2012]冻结 分层图 dijkstra
- bzoj 2662: [BeiJing wc2012]冻结
- 2662: [BeiJing wc2012]冻结
- bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案
- [BZOJ]2661: [BeiJing wc2012]连连看 费用流
- BZOJ 2661: [BeiJing wc2012]连连看 费用流
- bzoj2662 [BeiJing wc2012]冻结
- BZOJ2662[BeiJing wc2012]冻结【SPFA】
- bzoj2662: [BeiJing wc2012]冻结 分层图最短路