bzoj 2763 [JLOI2011] 飞行路线 两维spfa
来源:互联网 发布:java udp服务器 编辑:程序博客网 时间:2024/06/08 06:39
题目:
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;}
阅读全文
1 0
- bzoj 2763 [JLOI2011] 飞行路线 两维spfa
- BZOJ[2763][JLOI2011]飞行路线 spfa
- 【bzoj 2763】2763: [JLOI2011]飞行路线 spfa二维
- BZOJ 2763 JLOI2011 飞行路线 分层图+堆优化SPFA
- BZOJ 2763: [JLOI2011]飞行路线
- bzoj 2763 [JLOI2011]飞行路线
- BZOJ 2763 [JLOI2011]飞行路线
- BZOJ 2763 [JLOI2011]飞行路线
- bzoj 2763: [JLOI2011]飞行路线
- bzoj 2763: [JLOI2011]飞行路线
- BZOJ 2763 [JLOI2011]飞行路线
- bzoj[JLOI2011]飞行路线
- 【BZOJ】【JLOI2011】飞行路线
- BZOJ 2763 [JLOI2011]飞行路线 Dijikstra
- BZOJ 2763: [JLOI2011]飞行路线 最短路
- |BZOJ 2763|最短路|[JLOI2011]飞行路线
- bzoj 2763 [JLOI2011]飞行路线 Dijikstra 分层
- 二维spfa [JLOI2011]飞行路线
- Effective C++ 24. Declare non-member functions when type convesions should apply to all parameters
- Verilog学习笔记基本语法篇(四)·········块语句
- Kickstart Round G 2017 Problem C. Matrix Cutting
- java中length(),size()区别
- 三子棋的代码实现
- bzoj 2763 [JLOI2011] 飞行路线 两维spfa
- Python爬取网页图片01
- [noip2015]斗地主(dfs+贪心)
- windows上 python install 错误
- 遍历与复制数组
- 统计学(一)
- JS实现字符串的截取
- 无序点云的B曲线拟合
- SSH与SSM学习之Spring11——Spring中的AOP