poj3169(差分約束系統)

2021-07-24 10:51:21 字數 971 閱讀 5419

**:

大概題意:有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建一...