格式输出错误,救救孩子
查看原帖
格式输出错误,救救孩子
1408748
yang_6165楼主2025/8/3 18:41
#include<bits/stdc++.h>
using namespace std;
const int maxN=1e4+5,maxM=1e5+5;
struct edge{
	int to;
	int nxt;
}e[maxM];
int head[maxN],cnt;
void addEdge(int u ,int v){
	e[++cnt].to=v;
	e[cnt].nxt=head[u];
	head[u]=cnt;
}
int dfn[maxN],low[maxN],timestamp;
stack<int> sta;
int popRound[maxN],roundID; 
void tarjan(int u){
	dfn[u]=low[u]=++timestamp;
	sta.push(u);
	for(int id=head[u];id;id=e[id].nxt){
		int v=e[id].to;
		if(0==dfn[v]){
			tarjan(v);
			low[u]=min(low[u],low[v]);
		}
		else if(0==popRound[v])
			low[u]=min(low[u],low[v]);
	}
	if(dfn[u]==low[u]){
		popRound[u]=++roundID;
		while(sta.top()!=u){
			popRound[sta.top()]==roundID;
			sta.pop();
		}
		sta.pop();
	}
}
bool output[maxN];
int main(){
	int n,m;
	cin>>n>>m;
	int u,v;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		addEdge(u,v);
	}
	for(int i=1;i<=n;i++){
		if(0==dfn[i])
			tarjan(i);
	}
	cout<<roundID<<endl;
	for(int i=1;i<=n;i++){
		if(output[i])
			continue;
		cout<<i<<' ';
		output[i]=true;
		for(int j=i+1;j<=n;j++)
			if(popRound[j]==popRound[i]){
				cout<<j<<" ";
				output[j]=true;
			}
        cout<<endl;
	}
	return 0;
}

救救孩子吧

2025/8/3 18:41
加载中...