本文共 1714 字,大约阅读时间需要 5 分钟。
d[u]表示从u离开时最少需要多少才能达到要求。
从终点开始往前更新,求出前继结点最少需要的d是多少
//#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF 0x1f1f1f1f#define lson idx<<1,l,mid#define rson idx<<1|1,mid+1,r#define PI 3.1415926535898template T min(const T& a,const T& b,const T& c) { return min(min(a,b),min(a,c));}template T max(const T& a,const T& b,const T& c) { return max(max(a,b),max(a,c));}void debug() {#ifdef ONLINE_JUDGE#else freopen("d:\\in1.txt","r",stdin); freopen("d:\\out1.txt","w",stdout);#endif}int getch() { int ch; while((ch=getchar())!=EOF) { if(ch!=' '&&ch!='\n')return ch; } return EOF;}struct Edge{ int from,to,dist;};struct HeapNode{ ll d; int u; bool operator < (const HeapNode &ant ) const { return d>ant.d; }};ll BS(ll x,int u){ if(u>=26)return x+1; ll l=0,r=LONG_LONG_MAX; while(l >1; if(mid-(mid%20==0?mid/20:mid/20+1)>=x) r=mid; else l=mid+1; } return l;}const int maxn = 55;const int n=52;vector g[maxn];vector edge;int done[maxn];ll d[maxn];int p[maxn];int toid(char c){ if(c>='A'&&c<='Z')return c-'A'; else return c-'a'+26;}char tochar(int id){ if(id<26)return id+'A'; else return id-26+'a';}void init(){ for(int i=0;i q; d[e]=need; p[e]=-1; q.push((HeapNode){need,e}); while(!q.empty()) { HeapNode x=q.top();q.pop(); int u=x.u; if(done[u])continue; done[u]=1; for(int i=0;i
转载于:https://www.cnblogs.com/BMan/p/3632922.html