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(因為
乙個點用來作為迭代點對其它點進行改進的平均次數為k,有辦法證明對於通常的情況,k在2左右
)用vector實現,時間有點慢1078ms。。。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define ll long long
#define pi acos(-1.0)
#define max int_max
#define min int_min
#define eps 1e-8
#define fre freopen("a.txt","r",stdin)
#define mod 1000000007
#define n 805
struct node;
int n,m;
double l,u;
vectorv[n];
double dis[n];
bool vis[n];
void build(int s,int t,double x)
void init()
q.push(tmp);}}
}}
printf("yes\n");
return ;
}int main()
return 0;
}
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...
hdu 3666差分約束
題目描述 給你乙個n m的矩陣,給你兩個數l和u l u 問你是否存在這樣的n m個數字 計作a1 an,b1 bm 使矩陣中任意元素xij,滿足 l xij ai bj u 輸出yes or no。解題報告 轉換成 xij ai u bj 0 和 l bj xij ai 0 差分約束中的xi xj...