hdu3666差分約束系統

2021-06-09 03:36:00 字數 783 閱讀 9999

題意:乙個n*m的矩陣,兩個陣列a,b。矩陣中的每個元素l<=(xij*ai)/bj<=u,問是否存在這樣的兩個陣列。

這是乙個差分約束的問題,將不等式變為xij*ai-u*bj<=0   and   l*bj-xij*ai<=0,但是由於是乘法形式,不符合差分約束xi-xj<=b的形式,故不等式兩面同時取對數,即變為log(ai)-log(bj)<=log(u/xij)   and   log(bj)-log(ai)<=log(xij/l), 然後按照差分約束的模板做就可以了。注意的是l,u是浮點型的,因為這個錯誤我找了好長時間。。。

#include #include #include #include using namespace std;

const int oo=1e8;

const int mn=161000;

const int mm=961000;

int edge,n,m;

double l,u;

int ver[mm],next[mm];

double dis[mn],cost[mm];

int head[mn],vis[mn],q[mn],outque[mn];

void addedge(int u,int v,double c)

bool spfa()

return true;

}int main()

if(spfa()) puts("yes");

else puts("no");

}return 0;

}

差分約束 hdu 3666

xij ai l bj 0 xij ai u bj 0 兩邊取對數來去除ai,bj前面的係數 有 logbj logai logxij logu logai log bj logl logxij 化成標準差分約束,建圖,spfa,注意乙個竅門,當入隊總數大於2 n m 時就可以輸出no 因為 乙個點...

HDU3666 差分約束

思路 根據題意可得,l a i g i j b j u,看到不等式,馬上想到差分約束 將上式移項得l g i j a i b j u g i j 再取對數log l g i j log a i log b j log u g i j 最後構造 的不等式,用spfa跑最短路,若存在負環,說明無解,輸出...

HDU 3666(差分約束)

2015 01 08 22 48 00 思路 巧妙的建圖.由 l cij ai bj u,要轉化成加減的話全體套上log.化為 log l log cij log ai log bj log u 1 log ai log bj log u log cij 2 log bj log ai log ci...