题目链接:点击打开链接
题目大意:略。
解题思路:
- 最终的变量初始化全部为1,避免 n==1,m==0 的情况。
- 通过 bfs 每次记录每一层的最后一个做标记。
AC 代码
#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int n,m,lvl,ans;
vector<int> vec[105];
void init()
{
for(int i=1;i<=n;i++) vec[i].clear();
lvl=ans=1;
}
void bfs()
{
queue<int> q;
while(!q.empty()) q.pop();
q.push(1);
int u,v,last=1,cnt=1,tail,sum=0;
while(!q.empty())
{
u=q.front(); q.pop();
for(int i=0;i<vec[u].size();i++)
{
q.push(vec[u][i]);
tail=vec[u][i];
sum++;
}
if(last==u)
{
last=tail;
cnt++;
if(sum>ans) ans=sum, lvl=cnt;
sum=0;
}
}
}
int main()
{
int u,v,k;
while(~scanf("%d%d",&n,&m))
{
init();
while(m--)
{
scanf("%d%d",&u,&k);
while(k--)
{
scanf("%d",&v);
vec[u].push_back(v);
}
}
bfs();
printf("%d %d\n",ans,lvl);
}
return 0;
}