poj2239 Selecting Courses
2013-06-04 19:40
489 查看
最近在学二分图匹配(是的,你没看错,我也没开玩笑,对此我也很无奈),继续发匹配的水题。
poj2239其实很容易就可以看出来可以把课程跟日程建立二分图,然后用匹配做。
var
n,i,j,p,q:longint;
a:array[1..310,1..310]of longint;
t:array[1..310]of longint;
match:array[1..310]of longint;
h:array[1..310]of boolean;
function check(v:longint):boolean;
var i,j:longint;
begin
for i:=1 to t[v] do
if(not h[a[v,i]])then
begin
h[a[v,i]]:=true;
if(match[a[v,i]]=0)or(check(match[a[v,i]]))then
begin
match[a[v,i]]:=v;
exit(true);
end;
end;
exit(false);
end;
procedure hungarian;
var i,ans:longint;
begin
ans:=0;
for i:=1 to n do
begin
fillchar(h,sizeof(h),0);
if(check(i))then inc(ans);
end;
writeln(ans);
end;
begin
readln(n);
while(not eof)do
begin
for i:=1 to n do
begin
read(t[i]);
for j:=1 to t[i] do
begin
read(p,q);
a[i,j]:=7*(q-1)+p;
end;
end;
fillchar(match,sizeof(match),0);
hungarian;
readln(n);
end;
end.
poj2239其实很容易就可以看出来可以把课程跟日程建立二分图,然后用匹配做。
var
n,i,j,p,q:longint;
a:array[1..310,1..310]of longint;
t:array[1..310]of longint;
match:array[1..310]of longint;
h:array[1..310]of boolean;
function check(v:longint):boolean;
var i,j:longint;
begin
for i:=1 to t[v] do
if(not h[a[v,i]])then
begin
h[a[v,i]]:=true;
if(match[a[v,i]]=0)or(check(match[a[v,i]]))then
begin
match[a[v,i]]:=v;
exit(true);
end;
end;
exit(false);
end;
procedure hungarian;
var i,ans:longint;
begin
ans:=0;
for i:=1 to n do
begin
fillchar(h,sizeof(h),0);
if(check(i))then inc(ans);
end;
writeln(ans);
end;
begin
readln(n);
while(not eof)do
begin
for i:=1 to n do
begin
read(t[i]);
for j:=1 to t[i] do
begin
read(p,q);
a[i,j]:=7*(q-1)+p;
end;
end;
fillchar(match,sizeof(match),0);
hungarian;
readln(n);
end;
end.
相关文章推荐
- 2632 Crashing Robots的解决方法
- 1573 Robot Motion (简单题)
- 状态压缩DP poj 2817 WordStack 入门题
- POJ 1003 java
- poj水题
- poj 1417 True Liars 解题报告 并查集 DP
- poj2243Knight Moves(Floyed-Warshall)
- poj3468(线段树成段更新)
- poj3264(RMQ问题的线段树实现方法)
- poj2777Count color(线段树)
- poj2823(线段树)
- poj1679(The Unique MST)Kruskal
- poj2352Stars(树状数组)
- poj1195(二维树状数组)
- poj2236(Wireless Network)
- poj1470(Closest Common Ancestors)
- poj2536二分图匹配
- poj1274 The Perfect Stall
- POJ 1503 大整数相加的问题
- POJ 1581