天路(01規劃 SPFA判負環)

2022-05-06 23:54:08 字數 1008 閱讀 7225

傳送門

公式來自洛谷題解

因為求v之和與p之和的比值的最大值。這個值不超過200

考慮到二分答案,設ans為最大值,則有

可以看出是01分數規劃

那麼每次就重新分配邊的權值: ans*ci-vi

再判負環,有說明ans不成立,反之成立。

特別提一下:這裡判負環是用dfs版的spfa,而不是bfs版的,dfs版的spfa在判負環上要更快。

#include#define m 20003

#define n 7002

#define inf 2100000001

using

namespace

std;

intread()

while(s>='

0'&&s<='9')

return x*f;

}struct

edgew[m];

intn,m;

int tot=0

; int head[n],vis[n];double

dis[n];

void add(int a,int b,int c,int

d)int spfa(int now,double

mid)}}

vis[now]=0

;

return1;

}int check(double

mid)

intmain()

for(int i=1;i<=n;++i)add(n+1,i,0,0

);

double l=0,r=200

;

double ans=0

;

while(l+0.01

if(ans==0)printf("

-1\n");

else printf("

%.1f\n

",ans);

}

view code

模板 Spfa判負環

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你判斷圖中是否存在負權迴路。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 如果圖中存在負權迴路,則輸出 yes 否則輸出 no 資料範圍 1 n 20...

spfa(判負環變形)

題目鏈結 題意 n種貨幣,m種交換 s v 邊 u v r1 c1 r2 c2表示u貨幣換成v貨幣需要c1手續費和交換率r1,v換u為c2,r2.轉換公式 val v val u c1 r1 初始有s貨幣v枚。問能否通過一系列的交換,可以獲得比初始更多的錢?解法 include include in...

TT 的美夢(SPFA判負環)

這一晚,tt 做了個美夢!在夢中,tt 的願望成真了,他成為了喵星的統領!喵星上有 n 個商業城市,編號 1 n,其中 1 號城市是 tt 所在的城市,即首都。喵星上共有 m 條有向道路供商業城市相互往來。但是隨著喵星商業的日漸繁榮,有些道路變得非常擁擠。正在 tt 為之苦惱之時,他的魔法小貓咪提出...