首页 > 编程语言 >POJ 3692(匈牙利算法)

POJ 3692(匈牙利算法)

时间:2022-10-25 12:37:39浏览次数:34  
标签:map begin end .. 3692 ans 算法 POJ 400


匈牙利算法:

b[]保存当前找交错路P的各点是否已被连通,a[]表示某点之前的点

本题的2分图是取最大团(各点互相连通),利用2分图性质,可看成补图的最大独立集(各点互不连通)……




Program P3692;
const
maxn=200;

var
n,m,l,i,j,k,ans,x,y:longint;
b:array[1..400] of boolean;
map:array[1..400,1..400] of boolean;
a:array[1..400] of longint;
function find(x:longint):boolean;
var
i,j:longint;
begin
for i:=1 to m do
if not(b[i]) and (map[x,i]) then
begin
b[i]:=true;
if a[i]=0 then begin a[i]:=x; exit(true); end;
if find(a[i]) then begin a[i]:=x; exit(true); end;
end;

exit(false);
end;
begin
i:=1;
read(n,m,l);
while (n+m+l>0) do
begin
ans:=0;
fillchar(a,sizeof(a),0);
fillchar(map,sizeof(map),true);
for k:=1 to l do
begin
read(x,y);
map[x,y]:=false;
end;
for k:=1 to n do
begin
fillchar(b,sizeof(b),false);
if find(k) then inc(ans);
end;
writeln('Case ',i,': ',n+m-ans);
inc(i);
read(n,m,l);
end;
end.



标签:map,begin,end,..,3692,ans,算法,POJ,400
From: https://blog.51cto.com/u_15724837/5794475

相关文章

  • POJ 2184(01背包+滚动数组)
    01背包模板题Programdd;constmaxn=1000;maxv=100000;minv=-100000;NULL=-2139062144;varn,i,j,ans,p,np:longint;ts,tf:array[1..maxn]oflongint;......
  • POJ 1950(不打表做法)
    这题就是搜……注意设定maxn要不然肯定爆maxn=1*10^最大位数/21234..89-11121314这样的Programaa;constmaxn=1000000000000000;varn,t:longint;a:array[1..15]......
  • POJ 3256(SPFA)
    这题只能对每一个点查一遍……有向图的话能用floyd,可是迫于时限用了SPFA。Programaa;constmaxk=10000;maxn=10000;maxm=10000;vark,n,m,i,j,l:longint;a:ar......
  • POJ 2110(最小生成树)
    这题的思路就是找一个范围,看看这个范围是否可行主流是二分Ans,我是先把点排序,求最小生成树检查首位的ProgramP2110;typeed=recordu,v,w:longint;end;vara......
  • POJ 1951(空串特判)
    这题的教训是要特判空串ProgramP1951;vars:string;len,i,j:longint;b:array[0..10000]ofboolean;functionisdight(x:longint):boolean;beginif(x>=65)an......
  • POJ 1952(最长不下降子序列的个数)
    求一个序列的最长不下降子序列的长度,与个数(相同数列算1个)关键是如何判重。显然如果之前有一个尾数相同且长度相同的序列,哪么后一个包含前一个所有可能的序列相同的序列,故将......
  • POJ 2588(解析几何+并查集)
    题目就是早从左到右的路注意输入的实数这题图画好就行,别像我一开始把图弄反就成从上开始找,若找到一个与下边界相邻的就无解,找到与左边相邻的记圆与左边界相交的下边的点(相当......
  • POJ 3844(同余)
    果断同余……D[j]-D[i] mod k=0D[j]=D[i]求有多少相等数对,用队列O(n)ProgramP3844;constmaxn=50000;maxd=1000000;varans,t,f,n,i,j:longint;d:array[0........
  • POJ 3122(二分答案)
    二分答案……Programpie;constlef=0.00001;vart,n,f,i,j:longint;r:array[1..10000]oflongint;s:array[1..10000]ofdouble;maxs:double;procedures......
  • POJ 3842(质数判断)
    7!=5040所以这题直接求质数比打一千万的表都快这提高诉我们阶乘其实不算大&看(算)清数据规模Programcc;varn,t,len,i,j,ans:longint;s:string;b:array[0..9]oflong......