bzoj 3232 圈地遊戲

2021-07-04 11:38:16 字數 1005 閱讀 9538

題意:

在乙個n*m的網格裡,邊上有花費,格里有權值;

從任意乙個點開始繞一圈,繞乙個簡單環出來,裡面的所有格仔就是收益;

求最大的收益/花費;

所有數<=100;

題解:

考慮01分數規劃的方式,但是花費和權值不在一起;

那麼考慮將格內的權值轉化到邊上;

實際上將邊有向化,按邊方向左面一行的權值為正,右面為負,加起來作為選了這條邊的權值;

這樣在圍成乙個環的過程中會將外面的點消掉,而裡面的點是四倍大小;

問題轉化成二分答案,對乙個圖進行check,考慮其中有沒有正權的環;

上乙個bf判斷就好了;

時間複雜度o(n^2*m^2*log400);

二分上界定為400就可以了,別忘了答案要除4;

**:

#include#include#include#define n 110

using namespace std;

int to[n*n<<2],next[n*n<<2],val[n*n<<2],cost[n*n<<2],head[n*n],tot;

int n,m,l[n][n],u[n][n],num[n][n];

double dis[n*n];

void add(int x,int y,int v,int c)

bool check(double l)

} if(!flag)

return 0;

} return 1;

}int main()

} for(i=0;i<=n;i++) }

for(i=1;i<=n;i++) }

double l=0,r=400,mid;

while(r-l>1e-5)

printf("%.3lf",l/4);

return 0;

}

BZOJ3232 圈地遊戲

膜拜下whx大爺 好神的做法 首先比值型別的最大值一般要二分答案轉判定。現在要你找到乙個環使得c mid v 0。這十分類似spfa判負環 所以我們考慮建圖找負環,每個網格線的交點向周圍四個方向建邊,邊權怎麼辦呢?將格仔上的數在列方向做字首和,a i j 表示第j列,前i行格仔的權值和,b i j ...

bzoj3232 圈地遊戲

二分最小割。乙個答案可行要滿足 v c ans leq 0 將s向每個點連邊,流量為該點權值,相鄰兩個點連邊,流量為邊的費用 ans,邊界上的點向邊界外面連邊,流量也為相應費用 ans。可以發現,每一種割完連到s的點都是選了的點,選了的點和未選的點中間的邊的費用一定割了,未選的點的權值也沒有得到,所...

BZOJ3232 圈地遊戲

bzoj dzy家的後院有一塊地,由n行m列的方格組成,格仔內種的菜有一定的價值,並且每一條單位長度的格線有一定的費用。dzy喜歡在地里散步。他總是從任意乙個格點出發,沿著格線行走直到回到出發點,且在行走途中不允許與已走過的路線有任何相交或觸碰 出發點除外 記這條封閉路線內部的格仔總價值為v,路線上...