CODE:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,m;
vector<int> E[maxn];
int dfn[maxn],low[maxn],stk[maxn],co[maxn],col,top,num,grp[maxn];
bool vis[maxn];
void tarjan(int u){
dfn[u]=low[u]=++num;
stk[++top]=u;
vis[u]=1;
for(auto v:E[u]){
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(!vis[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
co[u]=++col;
grp[col]++;
while(stk[top]!=u){
co[stk[top]]=col;
grp[col]++;
vis[stk[top]]=0;
top--;
}
top--;
}
}
int ind[maxn],oud[maxn];
int main(){
cin>>n>>m;
int u,v;
for(int i=1;i<=m;i++){
cin>>u>>v;
E[u].push_back(v);
}
for(int i=1;i<=n;i++){
if(!dfn[i])tarjan(i);
}
int ans1=1,ans21=0,ans22=0;
for(int i=1;i<=col;i++){
ans1=max(grp[i],ans1);
}
if(num==1){
cout<<ans1<<'\n'<<0;
return 0;
}
for(int uu=1;uu<=n;uu++){
for(auto vv:E[uu]){
if(co[uu]!=co[vv]){
ind[co[vv]]++;
oud[co[uu]]++;
}
}
}
for(int i=1;i<=col;i++){
if(ind[i]==0)ans21++;
if(oud[i]==0)ans22++;
}
cout<<ans1<<'\n'<<max(ans21,ans22);
return 0;
}
全wa,马蜂良好,求条