題目大意
john先生晚上寫了n封信,並相應地寫了n個信封將信裝好,準備寄出。但是,第二天john的兒子small john將這n封信都拿出了信封。不幸的是,small john無法將拿出的信正確地裝回信封中了。
將small john所提供的n封信依次編號為1,2,…,n;且n個信封也依次編號為1,2,…,n。假定small john能提供一組資訊:第i封信肯定不是裝在信封j中。請程式設計幫助small john,盡可能多地將信正確地裝回信封。
題解 首先找出最大匹配,如果最大匹配沒有n個,那麼就輸出none。我們知道,如果乙個信和信封是唯一對應的,那麼刪去這條邊,將不存在完美匹配。所以我們對於每個信封,刪去它與信封對應的邊,看是否有完美匹配,如果沒有就輸出。注意最後要將邊加上。**
function find(p:longint):longint;
vart,q:longint;
begin
find:=true;
t:=ls[p];
while t>0 do
with g[t] do
begin
if v[y]=0 then
begin
v[y]:=1;
q:=link[y];
link[y]:=p;
if (q=0) or find(q) then exit;
link[y]:=q;
end;
t:=next;
end;
find:=false;
end;
procedure match;
vari,ans:longint;
begin
fillchar(link,sizeof(link),0);
for i:=1 to n do
begin
fillchar(v,sizeof(v),0);
if find(i)then ans:=ans+1;
end;
writeln(ans);
end;
信與信封問題
題意 description john先生晚上寫了n封信,並相應地寫了n個信封將信裝好,準備寄出。但是,第二天john的兒子small john將這n封信都拿出了信封。不幸的是,small john無法將拿出的信正確地裝回信封中了。將small john所提供的n封信依次編號為1,2,n 且n個信封...
SSL P1331 信與信封問題
傳送門 我們可以在開始時把邊取反,讀入的是1 11,就置成0 00,讀入是0 00,就置成1 11,然後跑一邊匈牙利演算法,然後判斷是不是完美匹配,不是就直接輸出non enone none 第二步每次刪掉一條邊,判斷是不是完美匹配,不是就輸出這個兩個端點 第二步跑完之後沒有發現有乙個是可以輸出的,...
codevs1222 信與信封問題(匈牙利)
題目描述 description john先生晚上寫了n封信,並相應地寫了n個信封將信裝好,準備寄出。但是,第二天john的兒子small john將這n封信都拿出了信封。不幸的是,small john無法將拿出的信正確地裝回信封中了。將small john所提供的n封信依次編號為1,2,n 且n個...