SGU 121

题意:给一个无向图每条边染上白色或黑色,对于有两条以上的边的顶点要求既有黑边也有白边。两个顶点之间至多一条边。试设计一个高效算法。

 

难度:3.5

 

分析:首先,各连通分量需要单独考虑,因为互不影响。所以下面考虑连通图。我们一时不知有什么好办法,那么就从最简单的情况入手找些感觉。2个顶点的图是显然的,因为至多有一条边,随便染黑色或白色。3个顶点的图,如果是个三角形就无解;否则总可以,这只要简单枚举就能知道。
      4个顶点的图情形更多了,注意与3个顶点的情况联系起来。假如不存在圈,那么总有解,这只要考虑拿出一个度为1的点,其余三个顶点构成的图已经知道可以染色,再把这个度为1的点连的边根据另一端点的情况染色即可。假如存在圈,我们找一个顶点,它所连的顶点中有某一个度数大于2;如果找不到这样的顶点,意味着每个顶点度数不超过2,这只有一种情况:即各点依次相连构成一个圈,这种情形,偶数个点则有解,奇数个点则无解。除此之外,我们都能找到一个顶点X,它所连的顶点中有某一个(设为Y)度数大于2。现将除X之外的点构成的图染色,如果能按要求染好,那么添加X进去也可以,因为边XY可任意染色;否则,除X之外的图是一个奇数个点的圈,这种圈按要求染色只有一个点两边会同色,只要选取与X相连的点Y使之两边同色,然后添加X进去,边XY染成另一种颜色,如果X还发出其它边,显然这些边都可以任意染色,当然可满足要求。
      这样,就得出了结论:存在奇数个点的圈,则无解;否则有解。
     从前面的分析过程可以得出算法。对各连通分量分别处理。
    1,判断是否各点依次相连构成一个圈。如是则容易处理。花费时间O(|V|).
    2,预处理,计算各顶点的度。花费时间O(|E|).
    3,找到前面分析中的顶点X和顶点Y,花费时间O(|V|).
    4,从图中除去顶点X(即调整相关顶点的度),花费时间O(|V|).
    5,给除去顶点X剩下的图染色。花费时间T(n-1).
    6, 给顶点X发出的边染色。花费时间O(|V|).

    因此,染色过程费时T(n) = T(n-1)+ O(|V|).
    即 T(n) = O(|V|^2),再加上预处理时间可得:
    算法时间复杂度为O(|V|^2).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值