HDU3666 差分約束

2021-09-29 10:54:39 字數 869 閱讀 8072

思路:

根據題意可得,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跑最短路,若存在負環,說明無解,輸出no,反之輸出yes

注:有個坑點,這題對時間複雜度要求較高,所以spfa只能算到sqrt(n+m),否則就會被t飛

/*

hdu--3666

*/#includeusing namespace std;

const int n = 805;

const int inf = 0x3f3f3f3f;

int n, m, l, u;

int head[n], tot;

double dis[n];

bool vis[n];

int cnt[n];

struct edge e[n*n];

void add(int u, int v, double w)

bool spfa(int s)

vis[s] = true;

cnt[s] = 0;

dis[s] = 0;

queueq;

q.push(s);

while (!q.empty())

}} }

return true;

}int main()

} printf(spfa(1) ? "yes\n" : "no\n");

} 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 因為 乙個點...

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...