【codeforce 141D】Take-off Ramps 最短路问题
来源:互联网 发布:会计电算化用友软件 编辑:程序博客网 时间:2024/05/21 19:50
其实本人觉得这道题最大的考点是题意(理解了半小时)外加各种坑,因为太过复杂,解释题意我想会写好多字就不写了,谷歌翻译。思路很简单,把每一个跳板的起点和终点作为一个中转点,离散化以后建边,首先和前后建边(直接划过去,所以是双向的),花费是路德长度,然后跳板前后建单向边,边权 为缓冲区 路径加给定时间。
坑:1.cf日常卡spfa,T在30多组,必须用dijkstra
2.中间过程 爆long long
3.区间越过起点和终点的边应当直接忽略
4.输出方案的时候顺序为走的过去时候的顺序
上代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#define maxn 100020#include<queue>#define MK make_pair#define LL long longusing namespace std;LL n,L;LL cur[maxn*20],tot,ttot,head[maxn*10],cnt;struct node{ LL a,b,t,id;}nod[maxn*2];struct edge{ LL v,next,w,flag;}e[maxn*50];void adde(LL a,LL b,LL c,LL d){e[ttot].v=b,e[ttot].next=head[a],e[ttot].w=c,e[ttot].flag=d;head[a]=ttot++;}LL Q(LL x){return lower_bound(cur+1,cur+1+tot,x)-cur;}LL d[maxn*10],vis[maxn*10];LL ppap[maxn*10],yes[maxn*10],ans2[maxn*10];typedef pair<LL,LL>pii;priority_queue<pii,vector<pii>,greater<pii> >q;void dijkstra(){ memset(d,127,sizeof(d)); d[0]=0; q.push(MK(0,0)); while(!q.empty()){ LL u=q.top().second,x=q.top().first;q.pop(); for(LL i=head[u];i!=-1;i=e[i].next ){ LL v=e[i].v; if(d[v]>d[u]+e[i].w){ d[v]=d[u]+e[i].w; vis[v]=1; if(e[i].flag)yes[v]=e[i].flag ; else yes[v]=0; ppap[v]=u; q.push(MK(d[v],v)); } } } printf("%I64d\n",d[tot+1]); LL now=tot+1; while(now!=0){ if(yes[now])ans2[++(*ans2)]=yes[now]; now=ppap[now]; } printf("%I64d\n",*ans2); for(LL i=*ans2;i>=1;i--)printf("%I64d ",ans2[i]);}int main(){ memset(head,-1,sizeof(head)); scanf("%d%d",&n,&L); for(LL x,d,t,p,i=1;i<=n;i++){ scanf("%I64d%I64d%I64d%I64d",&x,&d,&t,&p); if(x-p<0||x+d>L)continue; nod[++cnt].a=x-p,nod[cnt].b=x+d,nod[cnt].t=t+p,nod[cnt].id=i;//?? cur[++tot]=nod[cnt].a,cur[++tot]=nod[cnt].b; } sort(cur+1,cur+1+tot);tot=unique(cur+1,cur+1+tot)-1-cur; for(LL i=1;i<=cnt;i++){ nod[i].a=Q(nod[i].a),nod[i].b=Q(nod[i].b); adde(nod[i].a,nod[i].b,nod[i].t,nod[i].id); } for(LL i=1;i<=tot;i++){ adde(i-1,i,cur[i]-cur[i-1],0);adde(i,i-1,cur[i]-cur[i-1],0); } adde(tot,tot+1,L-cur[tot],0); dijkstra(); return 00;}
0 0
- 【codeforce 141D】Take-off Ramps 最短路问题
- codeforce 543 B 最短路
- codeforce 449 B 最短路
- Take off again!
- codeforces 716D 最短路
- D-最短路(poj1860)
- codeforce 374A 网格图最短路走法
- js 最短路问题
- 最短路问题
- poj1062(最短路问题)
- 最短路问题
- Matlab--最短路问题
- 最短路问题总结
- 最短路问题
- 最短路问题 小结
- poj1062 最短路问题
- 最短路问题 小结
- 最短路问题
- java 权限管理框架
- UNITY 项目优化
- 集成 微信短视频 效果
- [从头学数学] 第288节 [计算几何] 多边形的布尔运算(下)
- 2013ACM/ICPC亚洲区南京站现场赛 HDU 4802 && HDU 4803 && HDU 4811 && HDU 4812
- 【codeforce 141D】Take-off Ramps 最短路问题
- BP算法
- bzoj 2753 [SCOI2012]滑雪与时间胶囊 最小生成树
- 多线程控制实例
- 第十八篇玩转【斗鱼直播APP】系列之娱乐菜单展示
- 工业应用——YouTube的视频推荐系统
- Android之QQ登录
- jsp日期格式化显示
- C语言开发环境安装——Codeblocks&GCC