hdu2413 二分 二分匹配

2021-06-21 06:59:15 字數 2216 閱讀 9647

題意:

地球和外星球大戰,地球有n個飛船,外星球有m個飛船,每個飛船有自己的其實戰艦和戰艦增長率,星球於星球之間有距離,問你最少多少年地球可以打敗外星球,每個星球最多只能和乙個星球對戰...

思路:題意的最後一句話告訴我們這個題目滿足二分圖,我們可以二分列舉多少年打敗,每次都重新建圖,對於h[i] , 和 a[j],如果當前二分:  

(mid - map[i][j]) * h[i].p + h[i].st >= a[i].p * mid + a[i].st ,(地球攻擊外星球,所以跑路的時間是地球付出) 就建邊i,j,然後二分匹配,如果得到的匹陪數是外星戰艦數,那麼滿足,則 up = mid - 1.........

#include#include#define n_node 250 + 100

#define n_edge 250 * 250 + 1000

#define inf 2000000000

typedef struct

star;

typedef struct

node;node h[n_node] ,a[n_node];star e[n_edge];

__int64map[n_node][n_node];

intmk_gx[n_node] ,mk_dfs[n_node];

intlist[n_node] ,tot;

voidadd(

inta,

intb)

intdfs_xyl(

ints)

}return0;

}voidbuid(

__int64mid,

intn,

intm)

}boolok(

intn,

intm)

returnsum==m;

}int

main

()__int64low,mid,up;low=0;up=inf;

intans= -1;

while

(low<=up)

elselow=mid+1;

}if(ans== -1)printf("impossible\n");

elseprintf("%d\n",ans);

}return0;

}

hdu 2413 最大匹配 二分)

思路 由於要求最少的時間,可以考慮二分,然後就是滿足在limit時間下,如果地球戰艦數目比外星戰艦數目多,就連邊,然後求最大匹配即可,判斷匹配數目是否等於外星球數目,如果相等,說明可以占領,繼續二分。1 include2 include3 include4 include5 include6 usi...

二分 二分匹配

給了乙個矩陣 n行m列 選n個數 要保證這n個數不在同行同列,計算出第k大的數最小 二分答案,然後我們對於每個a i j mid的我們就i和j建立一條邊 然後二分求最大匹配必須大於等於n k 1 因為是第k大 而不是第k小 坑了好久才發現 include include include includ...

二分匹配演算法

匈牙利演算法求二分匹配 下 include includeusing namespace std int v 頂點數 vectorg max v 圖的鄰接表表示 int match max v 所匹配的頂點 bool used max v dfs 中用到的訪問標記 向圖中增加一條連線 u 和 v 的...