为什么换一种遍历方式AC变TLE-70pts
查看原帖
为什么换一种遍历方式AC变TLE-70pts
740334
lilychen楼主2024/11/23 17:37

贴代码,其中被注释的是原来的写法

#include<bits/stdc++.h>
using namespace std;
#define F(i,a,b) for(int i=a;i<=b;i++)
#define _F(i,a,b) for(int i=a;i>=b;i--)
inline int read(){
	int p=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9')
		f=ch=='-'?-1:1,ch=getchar();
	while(ch>='0'&&ch<='9')
		p=p*10+ch-'0',ch=getchar();
	return p*f;
}
const int N=10005;
int n,m,t;
vector<int> a[N];
int s[N],ans,vis[N];
bool dfs(int x){
	if(vis[x])
//	if(a[x].empty()||vis[x])
		return false;
	vis[x]=true;
	for(auto y:a[x]){
//	F(i,0,a[x].size()-1){
//		int y=a[x][i];
		if(s[y]==0||dfs(s[y])){
			s[y]=x;
			return true;
		}
	}
	return false;
}
signed main(){
	n=read(),m=read(),t=read();
	F(i,1,t){
		int x=read(),y=read();
		a[x].push_back(y);
	}
	F(i,1,n){
		ans+=dfs(i);
		memset(vis,0,sizeof(vis));
	}
	printf("%d",ans);
	return 0;
}





2024/11/23 17:37
加载中...