題意:
地球和外星球大戰,地球有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 的...