[JLOI2011]飞行路线
2017-09-04 13:47
211 查看
Description
Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多k种航线上搭乘飞机。那么Alice和Bob这次出行最少花费多少?Input
数据的第一行有三个整数,n,m,k,分别表示城市数,航线数和免费乘坐次数。第二行有两个整数,s,t,分别表示他们出行的起点城市编号和终点城市编号。(0<=s,t<n)
接下来有m行,每行三个整数,a,b,c,表示存在一种航线,能从城市a到达城市b,或从城市b到达城市a,价格为c。(0<=a,b<n,a与b不相等,0<=c<=1000)
Output
只有一行,包含一个整数,为最少花费。Sample Input
5 6 10 4
0 1 5
1 2 5
2 3 5
3 4 5
2 3 3
0 2 100
Sample Output
8HINT
对于30%的数据,2<=n<=50,1<=m<=300,k=0;对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;
对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.
[b]建立分层图。
f[u][t]表示在节点u时已经免费乘坐t次的最少花
费。照样跑最短路。
枚举与u相连的所有节点v,w(u,v)表示权值。
若t<k:
f[v][t+1]=min(f[v][t+1],f[u][t])
对于所有:
f[v][t]=min(f[v][t],f[u][t]+w(u,v))[/b]
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; struct Node { int next,to,dis; }edge[100001]; struct XXX { int x; int k; }; int num,head[100001],dist[100001][11],n,m,k,S,T,ans; bool vis[100001][11]; void add(int u,int v,int d) { num++; edge[num].next=head[u]; head[u]=num; edge[num].to=v; edge[num].dis=d; } void SPFA() {int i; queue<XXX> Q; Q.push((XXX){S,0}); dist[S][0]=0; while (Q.empty()==0) { XXX u=Q.front(); Q.pop(); vis[u.x][u.k]=0; for (i=head[u.x];i;i=edge[i].next) {int v=edge[i].to; if (dist[v][u.k]>dist[u.x][u.k]+edge[i].dis) { dist[v][u.k]=dist[u.x][u.k]+edge[i].dis; if (vis[v][u.k]==0) { vis[v][u.k]=1; Q.push((XXX){v,u.k}); } } if (u.k+1<=k&&dist[v][u.k+1]>dist[u.x][u.k]) { dist[v][u.k+1]=dist[u.x][u.k]; if (vis[v][u.k+1]==0) { vis[v][u.k+1]=1; Q.push((XXX){v,u.k+1}); } } } } } int main() {int i,u,v,c; cin>>n>>m>>k; memset(dist,127/3,sizeof(dist)); scanf("%d%d",&S,&T); for (i=1;i<=m;i++) { scanf("%d%d%d",&u,&v,&c); add(u,v,c); add(v,u,c); } SPFA(); ans=2e9; for (i=0;i<=k;i++) ans=min(ans,dist[T][i]); cout<<ans; }
相关文章推荐
- [BZOJ2763][JLOI2011]飞行路线
- [JLOI2011] 飞行路线
- BZOJ2763: [JLOI2011]飞行路线
- 【JLOI2011】【bzoj2763】飞行路线 分层图最短路
- 2763: [JLOI2011]飞行路线
- BZOJ2763[JLOI2011]飞行路线 【分层图最短路】
- 飞行路线 bzoj2763 jloi2011(SPFA+分层图)
- [JLOI2011]飞行路线 分层图最短路
- [JLOI2011]飞行路线
- BZOJ[2763][JLOI2011]飞行路线 spfa
- [bzoj2763]2763: [JLOI2011]飞行路线 分层图最短路
- BZOJ 2763: [JLOI2011]飞行路线
- BZOJ 2763 [JLOI2011]飞行路线
- 2763: [JLOI2011]飞行路线 (分层图最短路+SLF优化)
- BZOJ2763 [JLOI2011]飞行路线(分层图最短路)
- BZOJ 2763: [JLOI2011]飞行路线 最短路
- (bzoj 2763 [JLOI2011]飞行路线)<分层图>
- [BZOJ 2763][JLOI 2011] 飞行路线
- 【BZOJ】【JLOI2011】飞行路线
- bzoj 2763: [JLOI2011]飞行路线 分层图最短路