这个题目名……感觉……很…… 很裸的一个tarjan吧…… 不说了,上代码(代码是谁)
#include <bits/stdc++.h> using namespace std; vector <int> que[51000]; int tim,ans,stc[51000],ps,out[51000],flag,dfn[51000],low[51000],clr[51000],ins[51000],top,color_num,count=0,maxn,rem,an[51000]; void tarjan(int x) { tim++; dfn[x]=tim; low[x]=tim; ins[x]=1; stc[++top]=x; for(int i=0;i<que[x].size();i++) { int tmp=que[x][i]; if(dfn[tmp]==0) { tarjan(tmp); low[x]=min(low[x],low[tmp]); } else if(ins[tmp]) low[x]=min(low[x],low[tmp]); } if(dfn[x]==low[x]) { if(stc[top]==x) ps++; flag=1; ins[x]=0; clr[x]=++color_num; while(stc[top]!=x) { flag++; clr[stc[top]]=color_num; ins[stc[top]]=0; top--; } if(flag>maxn) maxn=flag,rem=color_num; top--; } } int main() { int n,m; cin>>n>>m; for(int i=1;i<=m;i++) { int x,y,t; cin>>x>>y>>t; if(t==1) { que[x].push_back(y); } else { que[x].push_back(y); que[y].push_back(x); } } for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i); cout<<maxn<<endl; for(int i=1;i<=n;i++) if(clr[i]==rem) printf("%d ",i); return 0; }其实写的过程中没出什么错,就是……“tm”居然是关键字……
