classSolution{public:intfindCheapestPrice(intn,vector<vector<int>>&flights,intsrc,intdst,intk){vector<vector<pair<int,int>>>graph(n);usingT=tuple<int,int,int>;// (d, u, stops)priority_queue<T,vector<T>,greater<>>minHeap;vector<vector<int>>dist(n,vector<int>(k+2,INT_MAX));minHeap.emplace(0,src,k+1);// Start with node src with d == 0dist[src][k+1]=0;for(constvector<int>&f:flights){constintu=f[0];constintv=f[1];constintw=f[2];graph[u].emplace_back(v,w);}while(!minHeap.empty()){constauto[d,u,stops]=minHeap.top();minHeap.pop();if(u==dst)returnd;if(stops>0)for(constauto&[v,w]:graph[u]){constintnewDist=d+w;if(newDist<dist[v][stops-1]){dist[v][stops-1]=newDist;minHeap.emplace(newDist,v,stops-1);}}}return-1;}};
classSolution{publicintfindCheapestPrice(intn,int[][]flights,intsrc,intdst,intk){List<Pair<Integer,Integer>>[]graph=newList[n];// (d, u, stops)Queue<int[]>minHeap=newPriorityQueue<>((a,b)->a[0]-b[0]);int[][]dist=newint[n][k+2];Arrays.stream(dist).forEach(A->Arrays.fill(A,Integer.MAX_VALUE));for(inti=0;i<n;++i)graph[i]=newArrayList<>();for(int[]f:flights){finalintu=f[0];finalintv=f[1];finalintw=f[2];graph[u].add(newPair<>(v,w));}minHeap.offer(newint[]{0,src,k+1});// Start with node src with d == 0dist[src][k+1]=0;while(!minHeap.isEmpty()){finalintd=minHeap.peek()[0];finalintu=minHeap.peek()[1];finalintstops=minHeap.poll()[2];if(u==dst)returnd;if(stops>0)for(Pair<Integer,Integer>node:graph[u]){finalintv=node.getKey();finalintw=node.getValue();finalintnewDist=d+w;if(newDist<dist[v][stops-1]){dist[v][stops-1]=newDist;minHeap.offer(newint[]{d+w,v,stops-1});}}}return-1;}}
classSolution:deffindCheapestPrice(self,n:int,flights:List[List[int]],src:int,dst:int,k:int)->int:graph=[[]for_inrange(n)]minHeap=[(0,src,k+1)]# (d, u, stops)dist=[[math.inf]*(k+2)for_inrange(n)]foru,v,winflights:graph[u].append((v,w))whileminHeap:d,u,stops=heapq.heappop(minHeap)ifu==dst:returndifstops>0:forv,wingraph[u]:newDist=d+wifnewDist<dist[v][stops-1]:dist[v][stops-1]=newDistheapq.heappush(minHeap,(newDist,v,stops-1))return-1