leetcode 2127. 参加会议的最多员工数

 1 class Solution {
 2 public:
 3     int maximumInvitations(vector<int>& favorite) {
 4         int n=favorite.size();
 5         vector<int>ind(n);
 6         for(int i=0;i<n;i++)ind[favorite[i]]++;
 7         vector<int>mxlen(n,1);
 8         queue<int>q;
 9         for(int i=0;i<n;i++)
10         if(!ind[i])q.push(i);
11   
12         while(q.size())
13         {
14             auto u=q.front();
15             q.pop();
16             --ind[favorite[u]];
17             mxlen[favorite[u]]=max(mxlen[u]+1,mxlen[favorite[u]]);
18             if(!ind[favorite[u]]) q.push(favorite[u]);  
19         }
20         int f[n];
21         memset(f,0,sizeof(f));
22         function<int(int u)>dfs=[&](int u)
23         {
24               if(f[u])return 0;
25               f[u]=1;
26               int v=favorite[u];
27               return dfs(v)+1;
28         };
29         int mx1=0,mx2=0;
30         for(int i=0;i<n;i++)
31         {
32             if(!ind[i]||f[i])continue;
33             int cnt=dfs(i);
34             if(cnt==2)mx2+=mxlen[i]+mxlen[favorite[i]];
35             else mx1=max(mx1,cnt); 
36         }    
37         return max(mx1,mx2);
38     }
39 };

学会了用拓扑排序找链,找环。

上一篇:python学习day5/上午


下一篇:python学习(30)_集合_2