图论训练总结

来源:互联网 发布:网络推广的方式 编辑:程序博客网 时间:2024/05/22 00:36
开始打组队赛啦,正式负责做图论方面的题了,所以在慢慢刷这些个神题!

链接地址: VJ比赛地址

UVAlive 5903 Piece it together

题意:

给定一个图形,W,B 分别代表白色和黑色,一个黑色与两个白色方格组成一个L形状,问你用这个L形状是否能恰好成想要的形状!

思路:

开始是准备用网络流跑一发,自己建图建的比较丑,结果T了,后来改为二分图匹配才过。
建图是这样的,因为一个黑色的方格最多与两个处于相邻侧的白色方格组成一个合法的图形,所以我们可以把一个黑色的格子拆为两个点,一个点与上下格子为白色的点连边,另一个格子点与左右格子为白色的格子的点连边,所以对于这1个黑色格子来说,如果匹配数为2的话,则成功得到这个图形,所以整个建图完成后,跑一个二分图匹配,看匹配数是否等于2*B就行啦!

HDU 4067 Random Maze

题意:

给定一个有向图,保留一条边与删除一条边都会有相应得到花费,求最小的花费,使得最终的图满足除起点s和终点t以外,其它每个点的出度等于入度,且
For the entrance, its out-degree = its in-degree + 1.
For the exit, its in-degree = its out-degree + 1.

思路:

好难啊! 自己强行YY不成功呢。。。
做法大致都猜到是用最小费用流来解决,建图方法简直神了。
那么对于每条边,如果a<=b,那么保留这条边,in[v]++,out[u]++,sum+=a,然后连边v->u,流量1,费用为b-a(如果删除这条边的费用)
如果b < a,那么删去这条边,sum+=b,然后连边u->v,流量1,费用为a-b(如果保留这条边的费用)。
然后我们人为的加入一条t->s,直接in[s]++,out[t]++,使得图中所有点处于相同的状况。
设立超级源汇S、T,对于原图的每个点i,如果in[i]>out[i],则连边S->i,流量为in[i]-out[i], 费用为0,否则连边i->T,流量为out[i]-in[i],费用为0。至此,建图完成。

0 0
原创粉丝点击