厌氧求助
查看原帖
厌氧求助
696967
int_Hello_world楼主2023/9/13 15:07

rt,想知道为什么会厌氧。

代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
	int x=0,f=0;char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) f|=(ch=='-');
	for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
	return f?-x:x;
} 
void print(int x) { 
	if(x<0) putchar('-'),x=-x; 
	if(x>9) print(x/10); 
	putchar(x%10+48); 
} 
const int N=3e6+2023;
int n,m,a[N],b[N],head[N],cnt,tot,dfn[N],low[N],l,k;
vector<int>x,y;
struct node{
	int next,to,from;
}e[N<<1];
void add(int u,int v) {
	e[++cnt].next=head[u];
	e[cnt].from=u;
	e[cnt].to=v;
	head[u]=cnt;
}
 
void Tarjan(int now,int fa) {
	dfn[now]=low[now]=++tot;
	for (int i=head[now];i;i=e[i].next) {
		if (!dfn[e[i].to]) {
			Tarjan(e[i].to,now);
			low[now]=min(low[e[i].to],low[now]);
			if (low[e[i].to]>dfn[now]) {
				if (!a[e[i].to]||!b[e[i].to]||a[e[i].to]==k||b[e[i].to]==l) {
					x.push_back(e[i].from);
					y.push_back(e[i].to);
				}
			}
			a[now]+=a[e[i].to]; b[now]+=b[e[i].to];
		}
		else if (e[i].to!=fa) {
			low[now]=min(low[now],dfn[e[i].to]);
		}
	}
}
signed main(){
	n=read(); m=read(); k=read(); l=read();
	for (int i=1;i<=k;++i) {
		int x=read();
		a[x]=1;
	}
	for (int i=1;i<=l;++i) {
		int x=read();
		b[x]=1;
	}
	for (int i=1;i<=m;++i) {
		int x=read(),y=read();
		add(x,y); add(y,x);
	}
	for (int i=1;i<=n;++i) {
		if (!dfn[i]) Tarjan(i,0);
	}
	cout<<x.size()<<"\n";
	for (int i=0;i<x.size();++i) {
		cout<<x[i]<<" "<<y[i]<<"\n";
	}
	return 0;
}
2023/9/13 15:07
加载中...