P8436 AC+WA求助
  • 板块题目总版
  • 楼主T20201126
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/3/25 18:48
  • 上次更新2023/10/23 20:31:18
查看原帖
P8436 AC+WA求助
419474
T20201126楼主2023/3/25 18:48

题目

记录

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define re read()
inline int read(){
	int x=0,b=1;char c=getchar();
	while(!isdigit(c)){if(c=='-') b=-1;c=getchar();}
	while(isdigit(c)){x=x*10+c-'0';c=getchar();}
	return x*b;
}
const int N=500007,M=2000007;
int n,m,head[N],cnt;
struct node {
	int to,nex;
}edge[M*2];
void add(int x,int y){
	edge[cnt].to=y;
	edge[cnt].nex=head[x];
	head[x]=cnt++;
}

int p[M*2];
int dfn[N],low[N],tim,num;
vector<int > ans[N];
stack<int > Stack;
void tarjan(int x,int fa){
	dfn[x]=low[x]=++tim;
	Stack.push(x);
	for(int i=head[x];i;i=edge[i].nex){
		int y=edge[i].to;
		if(!dfn[y]){
			tarjan(y,i);
			low[x]=min(low[x],low[y]);
			if(dfn[x]<low[y])
				p[i]=p[i^1/*i%2==0?i-1:i+1*/]=1;
		}
		else if(i!=(fa^1/*fa%2==0?fa-1:fa+1*/))
			low[x]=min(low[x],dfn[y]); 
	}
	if(low[x]==dfn[x]){
		++num;
		int now;
		do
		{
			now=Stack.top();
			ans[num].push_back(now);
			Stack.pop();
		}
		while(now!=x);
	}
}

signed main(){
	n=re;m=re;
	for(int i=1;i<=m;++i){
		int u,v;
		u=re;v=re;
		if(u==v) continue; 
		add(u,v);add(v,u);
	}
	for(int i=1;i<=n;++i)
	if(!dfn[i]) tarjan(i,0);
//	for(int i=1;i<=n;++i) cout<<dfn[i]<<' '<<low[i]<<endl;
	cout<<num<<endl;
	for(int i=1;i<=num;++i) {
		cout<<ans[num].size()<<' ';
		for(auto j:ans[i]) cout<<j<<' ';
		cout<<"\n";
	}
	return 0;
}
2023/3/25 18:48
加载中...