信與信封問題

2021-07-13 20:40:19 字數 1008 閱讀 2381

題目大意

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個...