2018-沈阳网络赛-D-K短路

这个题就是求一个有向边的K短路问题,有向边必须将边分开存,当无向边时不用分开存

#include 
#include 
#include 
#include 
#include 
#include 
#define INF 0x3f3f3f3f

using namespace std;

const int N=1000+10;
int n,m,u,v,val,s,e,k,t;
int dis[N];
struct P
{
    int to,cost;
    bool operator < (const P & a) const
    {
        return cost>a.cost;
    }
};

vector

edge[N],redge[N]; void Dijkstra() { fill(dis,dis+n+2,INF); dis[e]=0; priority_queue

qu; qu.push(P{e,0}); while(!qu.empty()){ P x=qu.top(); qu.pop(); for(int i=0;idis[x.to]+y.cost){ dis[y.to]=dis[x.to]+y.cost; qu.push(P{y.to,dis[y.to]}); } } } } struct node { int to,len; bool operator < (const node & a) const { return len+dis[to]>a.len+dis[a.to]; } }; int A_star() { if(dis[s]==INF) return -1;//判断有无最短路 priority_queue qu; qu.push(node{s,0}); int num=0; while(!qu.empty()){ node a=qu.top(); qu.pop(); if(a.to==e) num++; if(num==k) return a.len; if(numt) return -1;//剪枝没有访问到第k次就不符合要求就立即退出 for(int i=0;i

 

你可能感兴趣的:(other)