bzoj 2763 [JLOI2011] 飞行路线 两维spfa
2017-10-22 21:29
393 查看
题目:
http://www.lydsy.com/JudgeOnline/problem.php?id=2763
好题;
首先,不能将边权排序,将大的几条边减为0,(显然);
其次,不能用最小生成树做,下图:
dis[i][k]:免费k条路径,起点到i的最短路,直接由它上一状态(免费k-1条边)的连边的起点转移过来(相当于这条边免费),或者由当前状态(免费k条边)的连边的起点转移过来(即这条边不免费),两者取最优值;
明确一件事:免费k条路径不会比免费k-1条路径更差;
所以最后输出dis[sy][k];
交了两边才过,因为将起点弄成1了……我就是个智障……
总结:
明确状态,注意转移,观察这条边的转移与哪些条件有关;
http://www.lydsy.com/JudgeOnline/problem.php?id=2763
好题;
首先,不能将边权排序,将大的几条边减为0,(显然);
其次,不能用最小生成树做,下图:
dis[i][k]:免费k条路径,起点到i的最短路,直接由它上一状态(免费k-1条边)的连边的起点转移过来(相当于这条边免费),或者由当前状态(免费k条边)的连边的起点转移过来(即这条边不免费),两者取最优值;
明确一件事:免费k条路径不会比免费k-1条路径更差;
所以最后输出dis[sy][k];
交了两边才过,因为将起点弄成1了……我就是个智障……
总结:
明确状态,注意转移,观察这条边的转移与哪些条件有关;
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<queue> using namespace std; const int MAXN=200001; int fst[MAXN],nxt[MAXN],dis[MAXN][12]; bool vis[MAXN][12]; struct hh {int from,to,cost;}ma[MAXN]; struct sh {int num,tim;}; int n,m,k,sx,sy,tot; void build(int f,int t,int c) { ma[++tot]=(hh){f,t,c}; nxt[tot]=fst[f]; fst[f]=tot; return; } void spfa() { queue<sh>q; memset(dis,0x7f,sizeof(dis)); memset(vis,0,sizeof(vis)); q.push((sh){sx,0}); vis[sx][0]=1,dis[sx][0]=0; while(!q.empty()) { sh x=q.front(); q.pop(); vis[x.num][x.tim]=0; for(int i=fst[x.num];i;i=nxt[i]) { int v=ma[i].to; if(dis[v][x.tim]>dis[x.num][x.tim]+ma[i].cost) { dis[v][x.tim]=dis[x.num][x.tim]+ma[i].cost; if(!vis[v][x.tim]) { vis[v][x.tim]=1; q.push((sh){v,x.tim}); } } if(x.tim+1<=k) { if(dis[v][x.tim+1]>dis[x.num][x.tim]) { dis[v][x.tim+1]=dis[x.num][x.tim]; if(!vis[v][x.tim+1]) { vis[v][x.tim+1]=1; q.push((sh){v,x.tim+1}); } } } } } return; } void solve() { scanf("%d%d%d%d%d",&n,&m,&k,&sx,&sy); for(int i=1;i<=m;i++) { int x,y,c; scanf("%d%d%d",&x,&y,&c); build(x,y,c),build(y,x,c); } spfa(); int ans=2147483647; cout<<dis[sy][k]; return; } int main() { solve(); return 0; }
相关文章推荐
- Bzoj 2763: [JLOI2011]飞行路线 拆点,分层图,最短路,SPFA
- BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)
- 【bzoj2763】【JLOI2011】【飞行路线】【dp+spfa】
- BZOJ 2763: [JLOI2011]飞行路线 【SPFA】
- BZOJ[2763][JLOI2011]飞行路线 spfa
- bzoj 2763: [JLOI2011]飞行路线【分层图+spfa】
- BZOJ 2763 JLOI2011 飞行路线 分层图+堆优化SPFA
- bzoj 2763 JLOI 2011 飞行路线 分层图+spfa
- BZOJ 2763: [JLOI2011]飞行路线
- 【Heap-Dijkstra】【分层图】bzoj2763 [JLOI2011]飞行路线
- bzoj 2763 [JLOI2011]飞行路线
- 飞行路线 bzoj2763 jloi2011(SPFA+分层图)
- [BZOJ2763][JLOI2011]飞行路线(图论)
- BZOJ 2763: [JLOI2011]飞行路线 分层图最短路
- Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图
- BZOJ 2763: [JLOI2011]飞行路线 spfa dp
- 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线
- BZOJ ~ 2763 ~ [JLOI2011]飞行路线 (分层图最短路,模板题)
- bzoj 2763: [JLOI2011]飞行路线
- Bzoj2763 [JLOI2011]飞行路线