D. Made In Heaven

K短路A*算法



#include<bits/stdc++.h> using namespace std; #define INF 0xffffff const int MAXN = 2e6; typedef long long ll; struct node { ll to; ll val; ll next; }; struct node2 { ll to; ll g,f; bool operator<(const node2 &r ) const { if(r.f==f) return r.g<g; return r.f<f; } }; node edge[MAXN],edge2[MAXN]; ll n,m,s,t,k,cnt,cnt2,ans; ll dis[1010],visit[1010],head[1010],head2[1010]; void init() { memset(head,-1,sizeof(head)); memset(head2,-1,sizeof(head2)); cnt=cnt2=1; } void addedge(ll from,ll to,ll val) { edge[cnt].to=to; edge[cnt].val=val; edge[cnt].next=head[from]; head[from]=cnt++; } void addedge2(ll from,ll to,ll val) { edge2[cnt2].to=to; edge2[cnt2].val=val; edge2[cnt2].next=head2[from]; head2[from]=cnt2++; } bool spfa(ll s,ll n,ll head[],node edge[],ll dist[]) { queue<int>Q1; ll inq[1010]; for(ll i=0;i<=n;i++) { dis[i]=INF; inq[i]=0; } dis[s]=0; Q1.push(s); inq[s]++; while(!Q1.empty()) { ll q=Q1.front(); Q1.pop(); inq[q]--; if(inq[q]>n) return false; ll k=head[q]; while(k>=0) { if(dist[edge[k].to]>dist[q]+edge[k].val) { dist[edge[k].to]=edge[k].val+dist[q]; if(!inq[edge[k].to]) { inq[edge[k].to]++; Q1.push(edge[k].to); } } k=edge[k].next; } } return true; } ll A_star(ll s,ll t,ll n,ll k,ll head[],node edge[],ll dist[]) { node2 e,ne; ll cnt=0; priority_queue<node2>Q; if(s==t) k++; if(dis[s]==INF) return -1; e.to=s; e.g=0; e.f=e.g+dis[e.to]; Q.push(e); while(!Q.empty()) { e=Q.top(); Q.pop(); if(e.to==t)//找到一条最短路径 { cnt++; } if(cnt==k)//找到k短路 { return e.g; } for(ll i=head[e.to]; i!=-1; i=edge[i].next) { ne.to=edge[i].to; ne.g=e.g+edge[i].val; ne.f=ne.g+dis[ne.to]; Q.push(ne); } } return -1; } int main() { while(~scanf("%d%d",&n,&m)) { init(); scanf("%lld%lld%lld",&s,&t,&k); ll tt; cin>>tt; for(ll i=1;i<=m;i++) { ll a,b,c; scanf("%lld%lld%lld",&a,&b,&c); addedge(a,b,c); addedge2(b,a,c); } spfa(t,n,head2,edge2,dis); ans=A_star(s,t,n,k,head,edge,dis); if(ans>tt || ans == -1) puts("Whitesnake!"); else puts("yareyaredawa"); } return 0; } 
全部评论

相关推荐

面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务