有的必须大于D 给出它们的关系 求第n头牛跟第一头的最远距离
思路:差分问题,求最大值 约束条件转化为 < ; 所以有S大-S小 <=
D1,
S大-S小>=D2 把这个条件转化一下==>
S小-S大<=-D2
然后就是spfa了
#include <stdio.h>
#include <string.h>
#define VM 10005
#define EM
200500
//原先数据都是少一个0的,但RE 不知为什么 多加一个就过了
#define inf 9999999999
struct edge
{
v,w,next;
}e[EM];
int head[VM],ep;
void addedge (int cu,int cv,int cw)
{
cv;
cw;
head[cu];
ep;
}
__int64 spfa (int n)
{
vis[VM],cnt[VM],queue[VM];
dis[VM];
1;i <= n;i ++)
vis[i] = 0;
cnt[i] = 0;
dis[i] = inf;
0;
-1,rear = 0;
1;
1;
++] = 1;
!= rear)
front = (front+1)%(n+1);
int u = queue[front];
vis[u] = 0;
for (int i = head[u];i != -1;i = e[i].next)
{
int v = e[i].v;
if (dis[v] > dis[u]+e[i].w)
{
dis[v] = dis[u] + e[i].w;
if (!vis[v])
{
vis[v] = 1;
cnt[v] ++;
if (cnt[v] >= n)