Wikioi 1222 信与信封问题(二分图匹配)
1222 信與信封問題
時(shí)間限制: 1 s
空間限制: 128000 KB
題目等級(jí) : 鉆石 Diamond
題解
題目描述 Description
John先生晚上寫了n封信,并相應(yīng)地寫了n個(gè)信封將信裝好,準(zhǔn)備寄出。但是,第二天John的兒子Small John將這n封信都拿出了信封。不幸的是,Small John無(wú)法將拿出的信正確地裝回信封中了。
將Small John所提供的n封信依次編號(hào)為1,2,…,n;且n個(gè)信封也依次編號(hào)為1,2,…,n。假定Small John能提供一組信息:第i封信肯定不是裝在信封j中。請(qǐng)編程幫助Small John,盡可能多地將信正確地裝回信封。
輸入描述 Input Description
n文件的第一行是一個(gè)整數(shù)n(n≤100)。信和信封依次編號(hào)為1,2,…,n。
n接下來(lái)的各行中每行有2個(gè)數(shù)i和j,表示第i封信肯定不是裝在第j個(gè)信封中。文件最后一行是2個(gè)0,表示結(jié)束。
輸出描述 Output Description
輸出文件的各行中每行有2個(gè)數(shù)i和j,表示第i封信肯定是裝在第j個(gè)信封中。請(qǐng)按信的編號(hào)i從小到大順序輸出。若不能確定正確裝入信封的任何信件,則輸出“none”。
樣例輸入 Sample Input
3
1 2
1 3
2 1
0 0
樣例輸出 Sample Output
1 1
program df;
var i,j,n,m,x,y,z,k,t,tt:longint;
a:array[0..500,0..500] of longint;
b:array[0..100] of boolean;
d,c,e:array[0..100] of longint;
function check(x:longint):boolean;
var i:longint;
begin
for i:=1 to n do
if (a[x,i]<>1) and (not b[i]) then
begin
b[i]:=true;
if (d[i]=0) or (check(d[i])) then
begin
d[i]:=x;
exit(true);
end;
end;
exit(false);
end;
begin
readln(n);
readln(x,y);
while (x<>0) and (y<>0) do
begin
a[x,y]:=1;
readln(x,y);
end;
t:=0;
for i:=1 to n do
begin
fillchar(b,sizeof(b),false);
if check(i) then inc(t); //先將匹配數(shù)量求出來(lái)
end;
for i:=1 to n do
for j:=1 to n do
if a[i,j]=0 then
begin
a[i,j]:=1; //假設(shè)這條邊不存在,即i與j是不能匹配
fillchar(d,sizeof(d),0);
tt:=0;
for k:=1 to n do
begin
fillchar(b,sizeof(b),false);
if check(k) then inc(tt);
end;
if tt<>t then //產(chǎn)生了影響,則這條邊是肯定的
begin
z:=1;
writeln(i,’ ‘,j);
end;
a[i,j]:=0;
end;
if z<>1 then writeln(‘none’);
end.
轉(zhuǎn)載于:https://www.cnblogs.com/Gxyhqzt/p/7784287.html
總結(jié)
以上是生活随笔為你收集整理的Wikioi 1222 信与信封问题(二分图匹配)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MYSQL数据库导入出错:#1046 -
- 下一篇: 求导的训练