5970. 参加会议的最多员工数(基环树)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5970. 参加会议的最多员工数(基环树)相关的知识,希望对你有一定的参考价值。
5970. 参加会议的最多员工数
思路
本题模型是内向基环树,答案分为两种情况:
1.长度大于2的环
2.所有的 长度为2的环加上两条最长链 的和。
对于第一种情况,直接暴力标记找环即可。
对于第二情况,直接拓扑后dp,这样dp得到的dp数组肯定是非环链的答案,因为环上的点不可能遍历到。
然后对两种情况取max即可。
class Solution
public:
bool b[100001];
int d[100001], c[100001], f[100001];
int maximumInvitations(vector<int>& a)
memset(d, 0, sizeof(d));
for (auto i : a)
d[i]++;
int n = a.size(), k = 0;
for (int i = 0; i < n; i++)
if (!d[i])
c[++k] = i;
for (int l = 1; l <= k; l++)
int m = c[l];
f[a[m]] = max(f[a[m]],f[m]+1);
if (!(--d[a[m]]))
c[++k] = a[m];
int ans = 0;
memset(b, false, sizeof(b));
for (int i = 0; i < n; i++)
if (d[i] && !b[i])
b[i] = true;
int j = i, z = 1;
j = a[j];
for (; j != i; b[j] = true, j = a[j], ++z);
ans = max(ans, z);
int res = 0;
for (int i = 0; i < n; i++)
if (a[i] > i && a[a[i]] == i)
res += 2 + f[i]+f[a[i]];
return max(res, ans);
;
以上是关于5970. 参加会议的最多员工数(基环树)的主要内容,如果未能解决你的问题,请参考以下文章
H - Traffic Network in Numazu HDU - 6393(基环树)