记录编号 243663 评测结果 AAAAAAAAAA
题目名称 [東方S1] 上白泽慧音 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 0.013 s
提交时间 2016-03-30 11:01:58 内存使用 1.17 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct edge{
	int to,next;
}lst[100050];int len=1;
int first[5050];
void insert(int a,int b){
	lst[len].to=b;
	lst[len].next=first[a];
	first[a]=len++;
}
bool instack[5050];
int s[5050];int top=0;
int time=0;
int t1[5050],t2[5050];
int min(int a,int b){
	return a<b?a:b;
}
int solu[5050];
int ans=0;
int tmpsolu[5050];
void tarjan(int x){
	t1[x]=t2[x]=++time;
	instack[x]=true;
	s[top++]=x;
	for(int pt=first[x];pt;pt=lst[pt].next){
	
		if(instack[lst[pt].to]){
			t2[x]=min(t2[x],t1[lst[pt].to]);
		}else if(!t1[lst[pt].to]){
			tarjan(lst[pt].to);
			t2[x]=min(t2[x],t2[lst[pt].to]);
		}
	}
	if(t1[x]==t2[x]){
		int now=0,tmp;
		while(s[top-1]!=x){
			tmpsolu[now++]=s[--top];
			instack[s[top]]=false;
		}
		tmpsolu[now++]=s[--top];
		instack[s[top]]=false;
		if(now>ans){
			ans=now;
			memcpy(solu,tmpsolu,sizeof(tmpsolu));
		}
	}
}
int main(){
	freopen("classroom.in","r",stdin);
	freopen("classroom.out","w",stdout);
	int n,m;
	scanf("%d %d",&n,&m);
	int a,b,c;
	for(int i=1;i<=m;++i){
		scanf("%d %d %d",&a,&b,&c);
		insert(a,b);
		if(c==2)insert(b,a);
	}
	for(int i=1;i<=n;++i){
		if(!t1[i])tarjan(i);
	}
	printf("%d\n",ans);
	sort(solu,solu+ans);
	for(int i=0;i<ans;++i){
		printf("%d ",solu[i]);
	}
	fclose(stdin);fclose(stdout);
	return 0;
}