#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
const int N=5e3+10,M=1e5+10;
int n,m;
int h[N],e[M],ne[M];
int dfn[N],low[N],c[N];
bool inc[N];
int idx=0,cnt=0,num=0;
stack<int>stk;
priority_queue<int,vector<int>,greater<int> >scc[N];
struct point{
int siz=0,id,dictionary;
}p[N];
void add(int a,int b)
{
e[++idx]=b,ne[idx]=h[a],h[a]=idx;
}
bool cmp(point a,point b)
{
(a.siz==b.siz)?(a.dictionary<b.dictionary):a.siz>b.siz;
}
void tarjan(int x)
{
dfn[x]=low[x]=++num;
stk.push(x);
inc[x]=true;
for(int i=h[x];i;i=ne[i]){
int y=e[i];
if(!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
}
else if(inc[y])low[x]=min(low[x],dfn[y]);
}
if(dfn[x]==low[x])
{
cnt++;
int y;
p[cnt].dictionary=stk.top();
do{
y=stk.top();
stk.pop();
inc[y]=false;
c[y]=cnt;
p[cnt].id=cnt;
p[cnt].siz++;
scc[cnt].push(y);
}while(x!=y);
}
}
int main() {
cin>>n>>m;
rep(i,1,m) {
int a, b, t;
cin>>a>>b>>t;
add(a, b);
if (t==2)add(b, a);
}
memset(dfn,0,sizeof dfn);
memset(inc,0,sizeof inc);
rep(i,1,n)
if(!dfn[i])
tarjan(i);
sort(p+1,p+1+cnt,cmp);
cout<<p[1].siz<<endl;
while(!scc[p[1].id].empty())
{
cout<<scc[p[1].id].top()<<" ";
scc[p[1].id].pop();
}
return 0;
}
佬们,求助一下,这段代码为啥re啊