**:
大概題意:有n個點,其中有ml個限制條件:點a,點b,的最長距離為d,有md個限制條件,點a,點b,的最短距離為d;點按序號順序排,求第乙個點到最後乙個點的最長距離。
解題思路:差分約束,其實我也不太清楚什麼是差分約束,大概就是將各種限制條件,逐個加入,先假設n個點間的距離都為無窮大,然後,按下列順序,(迴圈)n(n,ml,md),依次加入限制條件,就可以了,加入第一種限制時,點b的原距離與a點距離加上d,比較,取最小值為b點的最新距離,,min(b(原),a+d)。加入第二種限制時,已知b求a,min(a(原),b-d);
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using
namespace
std;
int d[1010];
struct mldml[10010];
struct mddmd[10010];
int main()
for(int i=0;iscanf("%d%d%d",&md[i].a,&md[i].b,&md[i].d);
}for(int i=0;ifor(int j=0;jif(d[j+1]1]);
}for(int j=0;jif(d[ml[j].a-1]1]=min(d[ml[j].a-1]+ml[j].d,d[ml[j].b-1]);}}
for(int j=0;jif(d[md[j].b-1]1]=min(d[md[j].b-1]-md[j].d,d[md[j].a-1]);}}
}if(d[0]<0)printf("-1\n");
else
if(d[n-1]==inf)printf("-2\n");
else
return
0;}
POJ 3169 差分約束
題意 好久沒做差分約束了,看到這道題第一想法是貪心 思路 差分約束 從i到i 1的距離 0 add i 1,i,0 對於互相討厭的牛從u到v的距離 d add v,u,d 對於互相喜歡的牛從u到v的距離 d add u,v,d 跑spfa就好了 順便判判dis 和入隊次數 by siriusren ...
poj3169 差分約束
關於差分約束,我強推這位大佬的部落格。題目是有的牛互相之間最多只能有乙個距離,有的牛最少要達到乙個距離。很容易寫出不等式,由於是要求最大值,所以是要化為小於等於號,求最短路。f i 表示i只牛在哪個位置 0 f b f a d f b f a d 等價於f a f b 0 f b f a d f a...
POJ 3169 差分約束
題意 n頭牛,按照編號從左到右排列,兩頭牛可能在一起,接著有一些關係表示第a頭牛與第b頭牛相隔最多與最少的距離,最後求出第一頭牛與最後一頭牛的最大距離是多少,如 果最大距離無限大則輸出 2,如果關係不能保證則輸出 1 題解 差分約束的入門題 差分約束就是如果dis b dis a c轉化為a到b建一...