題意:把 n 個人分成 m 組,給出 n 個人各自可選的組別集合,求一種合法的分配方案,使得人數最多的組的人數最少
分析:最多最少,一般二分跑不了,然後求分配就匈牙利稍微變形就可以了(變形是為了適應二分)
**:
#include
#include
#include
#include
using
namespace std;
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
const
int n =
1000+10
;vector<
int>g[n]
;string s;
int n,m;
int match[n]
[n],cnt[n]
;//cnt[i]表示當前第i組已經分配了多少人
//match[i][j]表示第i組第j個人的編號
bool vis[n]
;bool
dfs(
int u,
int lim)
else}}
return0;
}intkm(
int lim)
return res;
}int
main()
g[i].pb
(num);}
int l=
1,r=n,ans;
while
(l<=r)
cout<}}
poj 2289 網路流 and 二分查詢
include include include include define n 2000 define m 1000010 define inf 1 30 using namespace std struct edgeedge m int index n d n gap n e,list n 51...
hdu 2289 基礎二分
本以為二分的題嘛,有了模板一切都好說,這道題發出來其實有抄襲的嫌疑,算是給自己寫的糾正性文章了,原來的想法每次二分的條件是相似邊比的立方大於體積比,後來發現計算多誤差大,然後就變成了所求水的體積大於實際水的體積,結果因為強行套模板,還是錯55555.所以模板不是看懂會用就行了,還是要懂其中的思想啊。...
無題II 二分 匈牙利
這是乙個簡單的遊戲,在乙個n n的矩陣中,找n個數使得這n個數都在不同的行和列裡並且要求這n個數中的最大值和最小值的差值最小。輸入乙個整數t表示t組資料。對於每組資料第一行輸入乙個正整數n 1 n 100 表示矩陣的大小。接著輸入n行,每行n個數x 0 x 100 對於每組資料輸出乙個數表示最小差值...