傳送門:poj3169
題意:有n頭牛按編號順序排在一條直線上(乙個位置可以有多頭牛),兩兩喜歡的牛之間距離不能超過d,兩兩討厭的牛之間距離不能小於d,求1號牛和n號牛之間的最大距離。
紀念我的差分約束第一題。
因為此題第一次了解差分約束,個人強烈非常特別必須推薦我學習差分約束的部落格:寫的真是太好了!
感覺就算你沒有最短路的基礎這篇文章也能給你介紹明白差分約束是啥。
回到題上來,學會差分約束以後就明白了這其實就是個裸題啊,就差直接給說不等式了。
#include #include #include #include #define maxn 10005
#define inf 0x3f3f3f3f
using namespace std;
int n,m;//點數,邊數
struct nodemp[maxn*100];
int pre[maxn],dis[maxn];
int cnt=0;
void init()
void add(int u,int v,int w)
void spfa(int s,node *ed,int *fa,int *d)//起點、邊鄰接表、dis陣列
} }}}
if(d[n]>=inf)
printf("-2\n");
else
printf("%d\n",d[n]);
} int main()
{ int m1,m2;
while(~scanf("%d%d%d",&n,&m1,&m2))
{init();
int a,b,c;
for(int i=0;i
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建一...