bzoj 3993 星際戰爭

2022-06-01 05:09:10 字數 1376 閱讀 8886

題目大意:

x軍*和y軍*正在激烈地作戰  在戰鬥的某一階段,y軍*一共*遣了n個巨型機械人進攻x軍*的陣地,其中第i個巨型機械人的裝甲值為ai

當乙個巨型機械人的裝甲值減少到0或者以下時,這個巨型機械人就被摧毀了

x軍*有m個雷射**,其中第i個雷射**每秒可以削減乙個巨型機械人bi的裝甲值

雷射**的攻擊是連續的。這種雷射**非常奇怪,乙個雷射**只能攻擊一些特定的敵人

y軍*需要知道x軍*最少需要用多長時間才能將y軍*的所有巨型機械人摧毀

思路:建圖還是比較好想的

但是答案需要二分,然後用最大流判斷

連邊的時候

每個**和超級源連一條時間(二分得到)* bi 的邊

每個**和它可以消滅的機械人連一條流量為這個**到源點的流量的邊

每個機械人和超級匯連一條流量 ai 的邊

每次二分之後判斷最大流是不是等於ai之和即可

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10

#define ll long long

11#define inf 2139062143

12#define maxn 120

13#define eps 1e-4

14using

namespace

std;

15 inline int

read()

1619

while(isdigit(ch)) x=x*10+ch-'

0',ch=getchar();

20return x*f;21}

22int

n,m,a[maxn],b[maxn],mp[maxn][maxn],sum;

23struct

dinic

2429

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

30void build(double

x)31

39int

bfs()

4053}54

}55return vis[s]==tot;56}

57double dfs(int x,double

a)58

67return

flow;68}

69double

solve()

7077

return

ans;78}

79}d;

80int

main()

8196 printf("

%lf"

,l);

97 }

view code

BZOJ3993 星際戰爭 最大流

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

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

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

bzoj3993 SDOI2015 星際戰爭

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