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);    }}                

原创粉丝点击