题意:洛谷P2661
分析:
由题可知,一个人能经别人知道自己的生日,则他必然在一个环中,所以显然题目是让我们求图中最小的环。结合本题的特性,每个人的出度都为 1 1 1,那么每个人必定只在一个环中。如果有人的入度为 0 0 0则说明他一定不在环中,我们可以用拓扑的思想把他及他所连的边删去,然后继续做拓扑排序删除入度为 0 0 0的点即可。删完点之后剩下的就全是环了。这个时候我们对每个环做一次 d f s dfs dfs即可。 d f s dfs dfs的过程中将一个环内所有点标记(因为一个点只可能在一个环内,所以一个环内 d f s dfs dfs任意一个点都是一样的),标记过的点就不用再搜索了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 200000 + 5;
int n, to, cnt, sum, ans, in[maxn], vis[maxn