Ural 1544 Classmates 3

来源:互联网 发布:plc万能解密软件 编辑:程序博客网 时间:2024/06/04 19:49

         这道题目看似很经典的一题,之前肿么就是没有做到过呢?

        题意就是在一个50个点之内的无向图中,每个顶点有一种颜色,每一次操作可以将我们该点和周围所有通过该种颜色相邻的点都转变为另外一种颜色,最少需要几次可以将图中所有的点转变为同一种颜色,并且输出操作。

        解法:将相邻的同一种颜色缩成一个点,那么然后枚举每一个顶点,从这个点开始进行最短路,距离最远的那个点的距离就是需要从这个点开始染色需要的次数,然后取一个最小值。

        证明:为什么是这样的呢,假设我们从一个点开始进行一次最短路,那么将所有的顶点按照距离进行分层。因为这是一个分层的网络,所以不相邻的两层之间必定没有边,这边意味着在这个分层网络中,要将所有的点染成一种颜色至少需要2*某一种颜色层数,因为必定是双支的,否则一定可以通过抽动使得最短距离变短。所以这个就是理论下届。枚举所有的顶点就求出来了。

原创粉丝点击