二分圖匹配 奶牛分配

2021-06-03 12:39:55 字數 1252 閱讀 5841

描述

農夫約翰上個星期剛剛建好了他的新牛棚,他使用了最新的擠奶技術。不幸的是,由於工程問題,每個牛欄都不一樣。第乙個星期,農夫約翰隨便地讓奶牛們進入牛欄,但是問題很快地顯露出來:每頭奶牛都只願意在她們喜歡的那些牛欄中產奶。上個星期,農夫約翰剛剛收集到了奶牛們的愛好的資訊(每頭奶牛喜歡在哪些牛欄產奶)。乙個牛欄只能容納一頭奶牛,當然,一頭奶牛只能在乙個牛欄中產奶。

給出奶牛們的愛好的資訊,計算最大分配方案。

輸入格式

第一行 兩個整數,n (0 <= n <= 200) 和 m (0 <= m <= 200) 。n 是農夫約翰的奶牛數量,m 是新牛棚的牛欄數量。

第二行到第n+1行 一共 n 行,每行對應乙隻奶牛。第乙個數字 (si) 是這頭奶牛願意在其中產奶的牛欄的數目 (0 <= si <= m) 。後面的 si 個數表示這些牛欄的編號。牛欄的編號限定在區間 (1..m) 中,在同一行,乙個牛欄不會被列出兩次。

輸出格式

只有一行。輸出乙個整數,表示最多能分配到的牛欄的數量。

sample input

5 52 2 5

3 2 3 4

2 1 5

3 1 2 5

1 2

sample output

4

這是一道匈牙利演算法的入門題,比較簡單不多說。

accode:

#include #include #include #include const char fi = "stall4.in";

const char fo = "stall4.out";

const int maxn = 210;

const int max = 0x3fffff00;

const int min = -max;

struct edge ;

edge *edge[maxn];

int link[maxn];

std::bitset marked;

int n, m, t, c, ans;

void init_file()

inline void insert(int u, int v)

void readdata()

}} bool find(int u)

}return false;

} void work()

printf("%d", ans);

}int main()

二分 二分匹配

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

二分匹配 最大匹配 人員分配 鏈結矩陣

設有m個工人x1,x2,xm,和n項工作y1,y2,yn,規定每個工人至多做一項工作,而每項工作至多分配一名工人去做。由於種種原因,每個工人只能勝任其中的一項或幾項工作。問應怎樣分配才能使盡可能多的工人分配到他勝任的工作。這個問題稱為人員分配問題。第一行兩個整數m,n分別為工人數和工作數。接下來乙個...

進擊的奶牛(二分查詢)

farmer john建造了乙個有n 2 n 100,000 個隔間的牛棚,這些隔間分布在一條直線上,座標是x1,xn 0 xi 1,000,000,000 他的c 2 c n 頭牛不滿於隔間的位置分布,它們為牛棚裡其他的牛的存在而憤怒。為了防止牛之間的互相打鬥,farmer john想把這些牛安置...