全wa求调
查看原帖
全wa求调
742275
_czy楼主2024/7/2 20:57
#include<bits/stdc++.h>
using namespace std;
#define N 10003
int n,m,x,y,st[N],tp,sum,h[N];
int dfn[N],low[N],cnt,bl[N];
bool is[N],v[N];
vector<int>s[N];
struct edge{
	int to,nxt;
}e[N*10];
void dfs(int x){
	dfn[x]=low[x]=++cnt,st[++tp]=x,is[x]=1;
	for(int i=h[x];i;i=e[i].nxt){
		y=e[i].to;
		if(!dfn[y]){
			dfs(y);
			low[x]=min(low[x],low[y]);
		}else if(is[y])low[x]=min(low[x],dfn[y]);
	}
	if(dfn[x]==low[x]){
		sum++;
		do{
			bl[st[tp]]=sum,is[st[tp]]=0;
			s[sum].push_back(st[tp]);
		}while(st[tp--]!=x);
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		e[i]={y,h[x]},h[x]=i;
	}
	for(int i=1;i<=n;i++){
		if(!dfn[i])dfs(i);
	}
	for(int i=1;i<=sum;i++)sort(s[i].begin(),s[i].end());
	cout<<sum;
	for(int i=1;i<=n;i++){
		if(v[bl[i]])continue;
		v[bl[i]]=1;
		cout<<'\n';
		for(int j:s[bl[i]])cout<<j<<' ';
	}
}
2024/7/2 20:57
加载中...