|
|
|
|
|
|
随笔分类 -
二分图
poj3020
摘要:二分图匹配程序总是很简单,这道题却做得很窝囊,5WA居然是把s打成了i...建图:1,可以把带‘*’格横纵坐标之和为偶数的为集合A,奇数为集合B,这样ans=‘*’个数-最大匹配数,2,也可以直接把所有相邻‘*’格直接连边,(i,j之间和j,i之间都要连)ans=‘*’个数-最大匹配数/2建图法1:program poj3020;type node=record x,y,next:integer; end; node1=record x,y:integer; end;var la,lb,tot,h,w,i,m,k,ans:integer; a,b:array[1..400] of node1;
阅读全文
poj 2771
摘要:做这道题学会了三点:1,二分图的两个顶点,一定是分属两个不同的集合,一开始建图的时候,直接把可能有恋爱关系的人相连,这样其实就不是二分图,正确的应该是把可能有恋爱关系的男女相连。2,提交错误后,比如WA和RE,一定要跟踪变量运行,而不要只看程序。3,多组数据的时候,各变量和数组记得赋初值好久没做二分图的题了,其实这题真的很水,但弄了半天,TAT...照以上方法建图后,其实就是求二分图的最大独立集,最大独立集=总顶点数-最大匹配program poj2771;type node=record x,y,next:longint; end; node1=record h:integer; fm,fs
阅读全文
poj1422
摘要:最小路径覆盖=总结点数-最大匹配数这也是我第一道最小路径覆盖题,一开始没学,也没读清题目,就直接以为是最小点覆盖了...(以后要读清题目啊~囧),今后还得注意最小路径覆盖和最小点覆盖的区别啊,其他的都没什么了,最后提醒:poj上的数据输入格式有问题,路口数和道路数在同一行!!!(这也是在discuss上看到的,虽然看discuss不是什么好习惯...)贴个程序program poj1422;type node=record x,y,next:integer; end;var g:array[1..120*120] of node; first,link:array[1..120] of int
阅读全文
poj2226
摘要:这题关键在建图,想了N久,最后还是去看了题解,哇塞!那些大牛们是怎么想到的啊>>>这想法,太美妙了~详情请见http://ip96cns.blog.163.com/blog/static/170095192201117465473/贴个程序//不过都没什么用啦,思路出来了,so easy!program poj2226;type node1=record x,y,next:integer; end; node2=record c:char; x,y:integer; end;var g:array[1..2500] of node1; link,first:array[1..
阅读全文
poj1325
摘要:又是最小点覆盖数=最大匹配数用机器A,B的模式来做二分图的两个集合,这样每一条边就代表了一个工作,显然的求最小点覆盖数(一开始没想到,唉~)program poj1325;type node=record x,y,next:integer; end;var first,link:array[1..100] of integer; used:array[1..100] of boolean; g:array[1..1000] of node; n,m,k,i,len,ans:integer;procedure init;var p,q,w:integer;begin len...
阅读全文
poj3041
摘要:最小点覆盖数=最大匹配数把横,纵坐标分别作为二分图的两个集合,每个点的横纵坐标连一条边,求二分图的最小点覆盖数,也就是最大匹配数,用匈牙利算法,都没什么好说的program poj3041;type node=record x,y,next:integer; end;var n,k,i,ans:integer; g:array[1..10000] of node; used:array[1..500] of boolean; first,link:array[1..500] of integer;function find(s:integer):boolean;var temp:integer
阅读全文
poj1469 二分图匹配,匈牙利算法的模型
摘要:典型的二分图匹配,用匈牙利算法,(其实可以看作匈牙利算法的模型了)这题的数据范围值得注意。开始写的时候,把学生和课程的顺序乱了,悲剧WA~,改了之后就AC了,程序在时间和空间上都没加优化,1228K,860MSprogram course;type node=record x,y,next:integer; end;var n,m,k,l,i,j,tot,num,c:integer; link:array[1..300] of integer;//link[i]=0,顶点i为未盖点,link[i]=j,边j,i为匹配边 first:array[1..300] of integer;//firs
阅读全文
|
|