Aizu1311 分层图最短路 (...大概)
2013-10-07 18:16
671 查看
这一题目里面要求修改最小的边数使得一个有向图(其实无向也无所谓)的最短路长度缩小到C 最小要修改多少条边。
解题的关键在于:
1) 修改k 条边使得最短路等于c
2) 把k条边置0使得最短路小于或等于c
这两个条件是等价的。
于是。。 就是分层图最短路解决了。。。
(突然发现Dijkstra 已经不会写了只会写SPFA........ 颓废啊
解题的关键在于:
1) 修改k 条边使得最短路等于c
2) 把k条边置0使得最短路小于或等于c
这两个条件是等价的。
于是。。 就是分层图最短路解决了。。。
(突然发现Dijkstra 已经不会写了只会写SPFA........ 颓废啊
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxn=100; const int maxm=1000; const int inf=100000008; int n,m,c,u,v,p,en; int s[maxn+10],inq[maxn+10],dis[maxn+10][maxn+10]; struct edge{ int u,v,l,nxt; }es[maxm+10]; void add_edge(int u,int v,int p){ es[++en].u=u; es[en].v=v; es[en].l=p; es[en].nxt=s[u]; s[u]=en; } void spfa(int a){ for(int i=1;i<=n;i++) dis[i][0]=inf; memset(inq,0,sizeof(inq)); queue<int> q; dis[1][0]=0; inq[1]=1; q.push(1); while(!q.empty()){ int p=q.front(); for(int i=s[p];i;i=es[i].nxt) if(dis[p][0]+es[i].l<dis[es[i].v][0]){ dis[es[i].v][0]=dis[p][0]+es[i].l; if(!inq[es[i].v]){ inq[es[i].v]=1; q.push(es[i].v); } } q.pop(); inq[p]=0; } } void spf(int a,int d){ for(int i=1;i<=n;i++) dis[i][d]=inf; memset(inq,0,sizeof(inq)); queue<int> q; for(int i=1;i<=en;i++) if(dis[es[i].u][d-1]<dis[es[i].v][d]){ dis[es[i].v][d]=dis[es[i].u][d-1]; if(!inq[es[i].v]){ inq[es[i].v]=1; q.push(es[i].v); } } while(!q.empty()){ int p=q.front(); for(int i=s[p];i;i=es[i].nxt) if(dis[p][d]+es[i].l<dis[es[i].v][d]){ dis[es[i].v][d]=dis[p][d]+es[i].l; if(!inq[es[i].v]){ inq[es[i].v]=1; q.push(es[i].v); } } q.pop(); inq[p]=0; } } int main(){ scanf("%d%d%d",&n,&m,&c); while(n+m+c){ en=0; memset(s,0,sizeof(s)); for(int i=0;i<m;i++){ scanf("%d%d%d",&u,&v,&p); add_edge(u,v,p); } int ans=0; spfa(1); while(dis [ans]>c) spf(1,++ans); printf("%d\n",ans); scanf("%d%d%d",&n,&m,&c); } return 0; }
相关文章推荐
- BZOJ_1579_[Usaco2009 Feb]Revamping Trails 道路升级_分层图最短路
- 分层图最短路【bzoj2662】[BeiJing wc2012]冻结
- poj3635Full Tank?[分层图最短路]
- [CODEVS1912] 汽车加油行驶问题(分层图最短路)
- BZOJ2763[JLOI2011]飞行路线 [分层图最短路]
- Aizu 1311 Test Case Tweaking(spfa变形,dp)
- BZOJ 1579: [Usaco2009 Feb]Revamping Trails 道路升级 分层图最短路
- Aizu - 2249 Road Construction 最短路变形
- 【bzoj 2834】回家的路(分层图最短路)
- BZOJ2763 [JLOI2011]飞行路线(分层图最短路)
- BZOJ 2763: [JLOI2011]飞行路线 分层图最短路
- 【东方模拟题】伊吹萃香 分层图最短路
- Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图
- Aizu 1318 Long Distance Taxi 最短路
- 【最短路】【Heap-Dijkstra】【分层图】bzoj2662 [BeiJing wc2012]冻结
- Aizu 0189 (多源 最短路Floyd )
- 【bzoj1579】[Usaco2009 Feb]Revamping Trails 道路升级 分层图最短路
- BZOJ 2834: 回家的路 分层图最短路
- 【codevs1912】汽车加油行驶问题 分层图最短路
- BZOJ-1922 大陆争霸 多限制、分层图最短路 (堆+dijkstra)