随笔分类 - 双连通
摘要:题意:一个网络中有N台电脑,M条线路,现在任意两台电脑都可以互相通信,但是有些线路是重要的,如果破坏了他们,那么这个网络就不连通了,我们称这样的线路为“桥”,如果向网络中加入一些线路,问加入线路后的网络中有多少“桥”。思路:先求出强连通分支,缩点形成一个树,如果加入线路的两点在同一分支中,那么这条线路就没什么用了,直接输出cnt就可以了,如果这两点不在同一分支中,那么就相当于向一根树中加入一条边,然后将从这两点到他们最近公共祖先的线路都去掉就是现在网络中的“桥”的数量。这题不限时间,LAC用最原始的方法都能过,因为对LAC的两种求法都不太熟悉,所以就用了最原始的方法。代码:View Code
阅读全文
摘要:题意:亚瑟王座下有N个骑士,他们要坐在一张圆桌上议会,但是你知道,骑士的脾气总是很暴躁的,如果相邻的两个骑士的意见不同,他们就会动用武力,亚瑟王为了使议会顺利进行,要求巫师梅林设计一种方案,使任意两个互相讨厌的骑士都不坐在一起,圆桌上的人必须是奇数个,因为他也许会为一个问题进行投票,不希望出现票数相等的情况,当然也不能只有一个人,因为一个人根本不用开什么会议嘛,给出互相讨厌的骑士的连接关系,最后不能参加会议的骑士就会被开除,现在亚瑟王想知道最少要开除多少骑士。思路:建图很简单,就是给出的连接图的补图,求强连通分量也很容易想到,以为任意个强连通分量中的两个人都不是互相讨厌的,但是对于人数必须的奇
阅读全文
摘要:题意:一个国家有N个城市,有M条路连接这N个城市,通过这些路任意两个城市都可以互达,现在为了游客的安全,决定重新修葺一下这些路,但是为了能方便游客,需要新修一些路,使得任意两城市间都有两条路。思路:先求强连通分支,然后缩点,这样就形成了一个树,找到叶子节点ans,只要修(ans+1)/2条路就可以达到目的了。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#includ
阅读全文

浙公网安备 33010602011771号