• 高维宇宙


     

    二分图匹配代码

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int MX=1001;
    struct Edge {
        int to,next;
    }edge[41*41];
    bool ispr[MX*2],vis[41];
    int match[41],ser[41],first[41*41],n,cnt;
    void add(int from,int to)
    {
        edge[++cnt].to=to;
        edge[cnt].next=first[from];
        first[from]=cnt;
    }
    
    bool hungry(int from)
    {
        for(int i=first[from];i;i=edge[i].next)
        {
            int to=edge[i].to;
            if(vis[to]) continue;
            vis[to]=1;
            if(!match[to] || hungry(match[to])) {
                match[to]=from;
                return 1;
            }
        }
        return 0;
    }
    
    int main()
    {
        memset(ispr,1,sizeof(ispr));
        for(int i=2;i<=2001;++i)
            if(ispr[i])
                for(int j=i;i*j<=2001;++j)
                    ispr[i*j]=0;
        
        scanf("%d",&n); 
        for(int i=1;i<=n;++i) {
            scanf("%d",&ser[i]);
        }
        sort(ser+1,ser+1+n); 
        for(int i=1;i<=n;++i) { //奇数 
            if(ser[i]%2)
                for(int j=1;j<=n;++j) //偶数 
                    if(!(ser[j]%2) && ispr[ser[i]+ser[j]])
                         add(i,j);    
        }
        int ans=0;
        for(int i=1;i<=n;++i)
        {
            memset(vis,0,sizeof(vis));
            if(hungry(i)) ans++; 
        }
        printf("%d",ans); 
        return 0;
    }
    /*
    5 
    2 9 11 12 37
    */
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int MX=1001;
    struct Edge {
        int to,next;
    }edge[41*41];
    bool ispr[MX*2],vis[41];
    int match[41],ser[41],first[41*41],n,cnt;
    void add(int from,int to)
    {
        edge[++cnt].to=to;
        edge[cnt].next=first[from];
        first[from]=cnt;
    }
    
    bool hungry(int from)
    {
        for(int i=first[from];i;i=edge[i].next)
        {
            int to=edge[i].to;
            if(vis[to]) continue;
            vis[to]=1;
            if(!match[to] || hungry(match[to])) {
                match[to]=from;
                return 1;
            }
        }
        return 0;
    }
    
    int main()
    {
        memset(ispr,true,sizeof(ispr));
        for(int i=2;i<=2001;++i)
            if(ispr[i])
                for(int j=i+i;j<=2001;j+=i)
                    ispr[j]=false;
        
        scanf("%d",&n);
        for(int i=1;i<=n;++i) scanf("%d",&ser[i]);
        sort(ser+1,ser+1+n); 
        
        for(int i=1;i<=n;i++) //
        { 
            for(int j=1;j<=n;j++)
            { 
                if(ispr[ser[i]+ser[j]] && i!=j &&ser[i]%2==1&&ser[j]%2==0) 
                {
                    add(i,j);
                }
            }
        }
        int ans=0;
        for(int i=1;i<=n;++i)
        {
            memset(vis,0,sizeof(vis));
            if(hungry(i)) ans++; 
        }
        printf("%d",ans);
        return 0;
    }
    /*
    5 
    2 9 11 12 37
    
    10
    3 11 6 8 17 12 7 4 6 9
    */
    从0到1很难,但从1到100很容易
  • 相关阅读:
    python爬虫简单实现,并在java中调用python脚本,将数据保存在json文件中
    封闭类
    对象的复制和数据类成员的解构
    数据类
    Git 标签
    Git 查看提交历史
    [精]Oracle APEX 5.0 入门教程(一) Form表单
    UISearchbar去除背景色的方法,适合iOS5/6/7/8.0beta
    哈希表——线性探測法、链地址法、查找成功、查找不成功的平均长度
    《Android源代码设计模式解析与实战》读书笔记(二十一)
  • 原文地址:https://www.cnblogs.com/qseer/p/9531621.html
Copyright © 2020-2023  润新知