求助
查看原帖
求助
317859
wangjingjie2022楼主2020/7/30 22:08
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=50005;
int n,m,e,ans,cnt;
int a[1005],vis[1005];
int h[maxn],to[maxn],Next[maxn];
inline int read(){
	char ch;
	bool flag=0;
	while(!isdigit(ch=getchar()))
		flag|=(ch=='-');
	int res=ch^(3<<4);
	while(isdigit(ch=getchar()))
		res=(res<<1)+(res<<3)+(ch^(3<<4));
	return flag?-res:res;
}
inline void print(int x){
	if(x>9)print(x/10);
	putchar(x%10+'0');
}
void addedge(int x,int y){
	to[++cnt]=y;
	Next[cnt]=h[x];
	h[x]=cnt;
}
bool dfs(int x,int tag){
	if(vis[x]==tag)return 0;
	vis[x]=tag;
	for(int i=h[x];i;i=Next[i]){
		int y=to[i];
		if(!a[y]||dfs(a[y],tag)){a[y]=x;return 1;}
	}
	return 0;
}
int main(){
    n=read(),m=read(),e=read();
    while(e--)addedge(read(),read());
    for(int i=1;i<=n;i++)
    	if(dfs(i,i))ans++;
    print(ans);
    return 0;
}

以及很疑惑0分?

2020/7/30 22:08
加载中...