二分最大匹配,为后面的km算法做准备
1 int n, m; 2 bool b[100]; 3 int v[100]; 4 vector<int>e[100]; 5 bool find(int x){ 6 b[x] = true; 7 for (int a : e[x]){ 8 if (!v[a] || (!b[v[a]] && find(v[a]))){ 9 v[a] = x; 10 return true; 11 } 12 } 13 return false; 14 } 15 int match(){ 16 int ret = 0; 17 for (int i = 1; i <= n; ++i){ 18 memset(b, 0, sizeof(b)); 19 if (find(i)){ 20 ret++; 21 } 22 } 23 return ret; 24 }//二分图求最大匹配数
树状数组,一种比较快速求和,单点更改的数据结构
1 ll c[N]; 2 ll query(int x){ 3 ll ret = 0; 4 for (; x>0; x -=x&(-x)){ 5 ret += c[x]; 6 } 7 return ret; 8 }//查询到下标x的前缀和 9 void modify(int x, ll y){ 10 for (; x <=n; x += x&(-x)){ 11 c[x] += y; 12 }//下标x更改y 13 }//树状数组
浙公网安备 33010602011771号