https://www.cnblogs.com/five20/p/7594239.html
http://222.22.65.164/problem.php?id=4385
#include<bits/stdc++.h>
using namespace std;
const int N=5e3+5;
vector <int> ne[N];
int n,m,a,b,t,dfn[N],low[N],in[N],ans[N],id=0,cnt=0,pp[N],qq[N],k=0,maxx=0;
stack <int> s;
void tarjan(int u)
{
int v;
id++;
dfn[u]=low[u]=id;
s.push(u);
in[u]=1;
for(int i=0;i<ne[u].size();i++)
{
v=ne[u][i];
if(dfn[v]==0)
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(in[v])
{
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u])
{
cnt++;
do
{
v=s.top();
s.pop();
in[v]=0;
ans[v]=cnt;
}while(u!=v);
}
}
void work()
{
for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);
for(int i=1;i<=cnt;i++)
{
k=0;
memset(pp,0,sizeof(pp));
for(int j=1;j<=n;j++)
{
if(ans[j]==i)
pp[++k]=j;
}
sort(pp+1,pp+1+k);
if(maxx<k)
{
maxx=k;
for(int j=1;j<=k;j++)
{
qq[j]=pp[j];
}
}
else if(maxx==k&&qq[1]>pp[1])
{
for(int j=1;j<=k;j++)
{
qq[j]=pp[j];
}
}
}
cout<<maxx<<endl;
for(int i=1;i<=maxx;i++)
{
cout<<qq[i]<<" ";
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a>>b>>t;
ne[a].push_back(b);
if(t==2)
{
ne[b].push_back(a);
}
}
work();
return 0;
}
/*
7 9
1 2 1
2 3 1
3 5 1
4 2 1
3 4 1
4 5 1
1 6 1
6 7 1
7 1 1
5 5
1 2 1
1 3 2
2 4 2
5 1 2
3 5 1
*/