50pts只有WA求条
查看原帖
50pts只有WA求条
752094
MornHus楼主2023/10/17 21:34
#include<bits/stdc++.h>
using namespace std;
#define maxn 5005
#define maxm 50005
int read(){
	int x=0,f=1;char c=getchar();
	while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^'0');c=getchar();};
	return x*f;
}
int n,m;
int dfn[maxn];
int low[maxn];
int vis[maxn];
int stack_[maxn],index_;
int sum,tag;
int color[maxn];
vector<int>g[maxn];
int max_size=-1;
priority_queue<int,vector<int>,greater<int> >ans_q;

void tarjan(int now){
	dfn[now]=low[now]=++tag;
	vis[now]=1;
	stack_[++index_]=now;
	
	for(int i=0;i<g[now].size();i++){
		int to=g[now][i];
		if(!dfn[to]){
			tarjan(to);
			low[now]=min(low[now],low[to]);
		}else{
			if(vis[to]){
				low[now]=min(low[now],low[to]);
			}
		}
	}
	
	if(dfn[now]==low[now]){
		sum++;
		int sizes=0;
		priority_queue<int,vector<int>,greater<int> >q;
		while(1){
			int stacktop=stack_[index_];
			color[stacktop]=sum;
			vis[now]=0;		
			sizes++;
			q.push(stacktop);
			index_--;
			if(now==stack_[index_+1])break;
		}
		if(sizes>max_size||(sizes==max_size&&q.top()<ans_q.top())){
			max_size=sizes;
			while(!ans_q.empty())ans_q.pop();
			while(!q.empty()){
				ans_q.push(q.top());
				q.pop();
			}
		}
	}
} 
int main(){
	n=read();
	m=read();
	freopen("out.out","w",stdout);
	for(int i=1,a,b,t;i<=m;i++){
		a=read();
		b=read();
		t=read();
		if(t==1)
			g[a].push_back(b);
		else{
			g[a].push_back(b);
			g[b].push_back(a);
		}
	}	
	for(int i=1;i<=n;i++){
		if(!dfn[i])tarjan(i);
	}
	cout<<max_size<<'\n';
	while(!ans_q.empty()){
		cout<<ans_q.top()<<' ';
		ans_q.pop();
	}
	return 0; 
}
2023/10/17 21:34
加载中...