BZOJ4773 負環 二分

2021-08-28 09:19:11 字數 1445 閱讀 3008

233可能我是因為沒看懂倍增的做法才去學的二分做法的,本題我們是要求最小的答案,答案是客觀已經存在的(不像dp,你需要做一些選擇),顯然是滿足單調性的,因此我們可以二分,再利用dfs-spfa找負環的方法,我們限制spfa搜尋的層數,不就是限制點數的範圍了嗎?

(資料小我猜你也卡不了)

ac code:

#include

#include

#include

#include

#include

#define rg register

#define il inline

#define maxn 505

#define ll long long

#define eps 1e-8

#define lid id << 1

#define rid (id << 1) | 1

#define rep(a,b,c) for (rg int a = 1 ; a <= c ; a += b)

using

namespace std;

il int

read()

while

(ch >=

'0'&& ch <=

'9')

return x * w;

}int head[

500005

], cnt , n , m , num[maxn]

, dis[maxn]

;int vis[

500005

], vis0;

bool ok =0;

struct edgee[

500005];

void

add(

int u,

int v,

int w)

void

spfa

(int now ,

int depth ,

int lmt)

if(depth == lmt)

return

; dis[to]

= dis[now]

+ e[i]

.v; vis[to]

= vis0;

spfa

(to , depth +

1, lmt)

; vis[to]--;

}}}bool

check

(int mid)

return0;

}int

main()

if(!check

(n))

rg int l =

1, r = n , ans =

9999999

;while

(l <= r)

cout << ans;

return0;

}

bzoj 4773 負環 倍增

在忘記考慮負環之後,黎瑟的演算法又出錯了。對於邊帶權的有向圖 g v,e 請找出乙個點數最小的環,使得 環上的邊權和為負數。保證圖中不包含重邊和自環。第1兩個整數n,m,表示圖的點數和邊數。接下來的m行,每 三個整數ui,vi,wi,表 有一條從ui到vi,權值為wi的有向邊。2 n 300 0 m...

POJ 3621 二分 判定負環

題意 傳送門 poj 3621 sightseeing cows 題解二分答案,問題轉化為判定滿足圖中存在乙個環,滿足下式的最大的 xxx fi t j x frac x tj f i x 若環上存在重複經過的點,其 f if i fi 只算一次,圖中點 邊數量不同。出現上述情況時,環由至少兩個簡單...

HNOI2009 最小圈 二分答案 負環

考慮帶權的有向圖 g v,e 以及 w e rightarrow r 每條邊 e i,j i neq j,i in v,j in v 的權值定義為 w 令 n v c c 1,c 2,cdots,c k c i in v 是 g 中的乙個圈當且僅當 c i,c 1 le i lt k 和 c k,c...