/* s[b+1]-s[a]>=c s[i+1]-s[i]>=0 s[i]-s[i+1]>=-1 */ #include#include #include #include #include using namespace std; #define maxn 50005 struct node { int v,w,next; }edge[maxn<<2]; int id,end,st; int a,b,c,n; int head[maxn]; bool in[maxn]; int d[maxn]; void init() { memset(head,-1,sizeof(head)); end=id=0; st=0x3f3f3f3f; } void addedge(int a,int b,int c) { edge[id].v=b; edge[id].w=c; edge[id].next=head[a]; head[a]=id++; } void SPFA() { queue Q; memset(in,0,sizeof(in)); memset(d,-0x3f,sizeof(int)*(end+5)); Q.push(0); in[0]=1; d[0]=0; int tmp; while(!Q.empty()) { tmp=Q.front();Q.pop(); in[tmp]=0; for(int i=head[tmp];i!=-1;i=edge[i].next) { if(d[edge[i].v]