qwq求助555555
查看原帖
qwq求助555555
245019
Glass_Testament楼主2021/1/11 17:04
#include<bits/stdc++.h>
using namespace std;
const int maxn=4004;
int n,tot;
struct hi{
	int y,next;
}b[maxn*16];
int last[maxn],d[maxn][2];
bool f[maxn];
void add(int s,int t){
	b[++tot].y=t;
	b[tot].next=last[s];
	last[s]=tot;
}
int dfs(int x){
	for(int i=last[x];i;i=b[i].next){
		int y=b[i].y;
		if(f[y]==false){
			f[y]=true;
			if(!d[y][0]||dfs(d[y][0])){
				d[y][0]=x;
				return 1;
				
			}
			if(!d[y][1]||dfs(d[y][1])){
				d[y][1]=x;
				return 1;
			}
		}
	}
	return 0;
}
int main(){
	cin>>n;
	int s,t;
	for(int i=1;i<=n*2;i++){
		scanf("%d %d",&s,&t);
		add(i,s);
		add(i,t);
	}
	int ans=0;
	for(int i=1;i<=n*2;i++){
		ans+=dfs(i);
	    memset(f,false,sizeof(f));
	}
	printf("%d",ans);
	return 0;
}

为什么第20行封路 f[y]=true 不能移到底下两个判断里边封?我试了如果在判断里面封就输出寂寞,然后MLE。这样是为了减少进入dfs函数的次数吗?

2021/1/11 17:04
加载中...