本地输出与洛谷不一致
查看原帖
本地输出与洛谷不一致
616964
Adolfo_North楼主2024/8/20 11:07
#include<bits/stdc++.h>
using namespace std;
const int N=5e3+7;
vector<int> G[N];
int n,m; 
int dfn[N],low[N],tot,sta[N],siz,insta[N];
struct node{
	int sz,fist;
	priority_queue<int> q;
}g[N];
int scc;
void tarjan(int u){
	dfn[u]=low[u]=++tot;
	insta[u]=1,sta[++siz]=u;
	for(int v:G[u]){
		if(!dfn[v]){
			tarjan(v);
			low[u]=min(low[u],low[v]);
		}
		else if(insta[v]) low[u]=min(low[u],dfn[v]);
	}
	if(dfn[u]==low[u]){
		node lin;
		lin.fist=sta[siz];
		int cnt=0,y;
		do{
			y=sta[siz--];
			lin.q.push(-y);
			insta[y]=0;
			cnt++;
		}while(y!=u);
		lin.sz=cnt;
		g[++scc]=lin;
	}
}
bool cmp(node x,node y){
	if(x.sz==y.sz) return x.fist<y.fist;
	return x.sz>y.sz;
}
int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1,u,v,op;i<=m;i++){
		cin>>u>>v>>op;
		G[u].push_back(v);
		if(op==2) G[v].push_back(u);
	}
	for(int i=1;i<=n;i++){
		if(!dfn[N]) tarjan(i);
	}
	sort(g+1,g+1+scc,cmp);
	cout<<g[1].sz<<'\n';
	while(!g[1].q.empty()){
		cout<<(-g[1].q.top())<<' ';
		g[1].q.pop();
	}
	return 0;
}

第一组数据:

10 10
5 3 1
6 8 2
5 7 2
1 10 1
4 9 1
7 3 2
8 8 1
3 1 1
9 7 2
7 8 2

代码在本地可以输出正确答案。

luogu:https://www.luogu.com.cn/record/173733484

2024/8/20 11:07
加载中...