BZOJ3993 星際戰爭(網路流,二分答案)

2021-08-14 04:16:29 字數 1803 閱讀 9065

2023年,在銀河系的某星球上,x軍團和y軍團正在激烈地作戰。在戰鬥的某一階段,y軍團一共派遣了n個巨型機械人進攻x軍團的陣地,其中第i個巨型機械人的裝甲值為ai。當乙個巨型機械人的裝甲值減少到0或者以下時,這個巨型機械人就被摧毀了。x軍團有m個雷射**,其中第i個雷射**每秒可以削減乙個巨型機械人bi的裝甲值。雷射**的攻擊是連續的。這種雷射**非常奇怪,乙個雷射**只能攻擊一些特定的敵人。y軍團看到自己的巨型機械人被x軍團乙個乙個消滅,他們急需下達更多的指令。為了這個目標,y軍團需要知道x軍團最少需要用多長時間才能將y軍團的所有巨型機械人摧毀。但是他們不會計算這個問題,因此向你求助。

第一行,兩個整數,n、m。

第二行,n個整數,a1、a2…an。

第三行,m個整數,b1、b2…bm。

接下來的m行,每行n個整數,這些整數均為0或者1。這部分中的第i行的第j個整數為0表示第i個雷射**不可以攻擊第j個巨型機械人,為1表示第i個雷射**可以攻擊第j個巨型機械人。

一行,乙個實數,表示x軍團要摧毀y軍團的所有巨型機械人最少需要的時間。輸出結果與標準答案的絕對誤差不超過10-3即視為正確。

2 23 10

4 60 1

1 11.300000

【樣例說明1】

戰鬥開始後的前0.5秒,雷射**1攻擊2號巨型機械人,雷射**2攻擊1號巨型機械人。1號巨型機械人被完全摧毀,2號巨型機械人還剩餘8的裝甲值;

接下來的0.8秒,雷射**1、2同時攻擊2號巨型機械人。2號巨型機械人被完全摧毀。

對於全部的資料,1<=n, m<=50,1<=ai<=105,1<=bi<=1000,輸入資料保證x軍團一定能摧毀y軍團的所有巨型機械人

每個雷射**造成的傷害是一定的

只是分配的問題

於是,在固定的時間裡,產生的總傷害是一定的

因此,二分乙個時間

檢查在這個時間內產生的傷害是否等於機械人的總血量即可

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define inf 1e9

#define maxl 50000

#define max 500

inline

int read()

int a[max],b[max];

int g[max][max];

struct line

e[maxl];

int h[max],cnt;

int ans,s,t,n,m;

inline

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

; h[u]=cnt++;

e[cnt]=(line);

h[v]=cnt++;

}int level[max];

int cur[max];

bool bfs()

}return level[t];

}double dfs(int u,double flow)

}return ret;

}double dinic()

return ret;

}void build(double tt)

int main()

printf("%.6lf\n",l);

return

0;}

bzoj 3993 星際戰爭

題目大意 x軍 和y軍 正在激烈地作戰 在戰鬥的某一階段,y軍 一共 遣了n個巨型機械人進攻x軍 的陣地,其中第i個巨型機械人的裝甲值為ai 當乙個巨型機械人的裝甲值減少到0或者以下時,這個巨型機械人就被摧毀了 x軍 有m個雷射 其中第i個雷射 每秒可以削減乙個巨型機械人bi的裝甲值 雷射 的攻擊是...

BZOJ3993 星際戰爭 最大流

顯然這是乙個二分圖。我們假設在k時間內能夠摧毀所有機械人,那麼第i個雷射 總共能夠削弱k bi的裝甲值。也就是說,k bi ai 那麼構建一張網路流的圖,s向雷射 連邊,容量為k bi,雷射 向對應的機械人連邊,容量為inf,機械人向t連邊容量為ai 決策滿足單調性,二分最短時間k 最後判斷是否滿流...

bzoj3993 SDOI2015 星際戰爭

3333年,在銀河系的某星球上,x軍團和y軍團正在激烈地作戰。在戰鬥的某一階段,y軍團一共派遣了n個巨型機械人進攻x軍團的陣地,其中第i個巨型機械人的裝甲值為ai。當乙個巨型機械人的裝甲值減少到0或者以下時,這個巨型機械人就被摧毀了。x軍團有m個雷射 其中第i個雷射 每秒可以削減乙個巨型機械人bi的...