nyist oj 239 月老的难题 解决超时问题
来源:互联网 发布:淘宝主播合作要多少钱 编辑:程序博客网 时间:2024/05/16 05:21
//首先这道题 ,不能直接用二维数组,他会遍历很多无用的点,因此你可以,用邻接表,或容器 vector 下面介绍 vector,具体用法不再说,看代码吧~~~~ #include<stdio.h>#include<string.h>#include<vector>using namespace std;int n,m,link[1000],vis[1000];vector <int> vc[10000];bool getsum(int a){ for(int i=0;i<vc[a].size();i++) //找到与 a 有关系得点 { int x=vc[a][i]; if(!vis[x]) { vis[x]=1; if(!link[x]||getsum(link[x])) { link[x]=a; return true; } //vis[x]=0; //此处不省略会对,,但是会超时 } } return false;}int main(){ int N,k,u,v; scanf("%d",&N); while(N--) { int num=0; for(int i=1;i<=n;i++) vc[i].clear(); memset(link,0,sizeof(link)); memset(vc,0,sizeof(vc)); scanf("%d%d",&n,&k); for(int i=1;i<=k;i++) { scanf("%d%d",&u,&v); vc[u].push_back(v); } for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(getsum(i))num++; } printf("%d\n",num); }}