(未更新完、做到相关题再更新相关部分
文章目录
无向图判断有无环并输出环上点
例题:H. Mad City
利用变种拓扑排序,先把度为1的点存入队中,每次取出队头,遍历邻接点,再将该条边删除也就是将邻接点度数减一,直至对空,然后所有度数不为0的点都是在环上的点,输出即可
code
cpp
for (int i = 0; i < n; i ++ )
{
int x, y;
cin >> x >> y;
add(x, y), add(y, x);
ind[x] ++, ind[y] ++ ;
}
function<void()> topsort = [&]()
{
queue<int> q;
for (int i = 1; i <= n; i ++ )
if (ind[i] == 1) q.push(i);
while (q.size())
{
int u = q.front();
q.pop();
for (int i = h[u]; ~i; i = ne[i])
{
int v = e[i];
if (-- ind[v] == 1) q.push(v);
}
}
};
topsort();
for (int i = 1; i <= n; i ++ )
if (ind[i] > 1) ans = true;