zoukankan      html  css  js  c++  java
  • 洛谷2756

    题解:

    很简单的二分图匹配

    第一问就是二分图最大匹配

    第二问就是prime记录的连接方案

    注意从小到大输出

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e4;
    int n,m,fi[N],ne[N],zz[N],f[N],prime[N],num,x,y,p[N];
    void jb(int x,int y)
    {
        ne[++num]=fi[x];
        fi[x]=num;
        zz[num]=y;
    }
    int dfs(int x)
    {
        if (f[x])return 0;
        f[x]=1;
        for (int i=fi[x];i;i=ne[i])
         {
             int t=zz[i];
             if (!prime[t]||dfs(prime[t]))
              {
                  prime[t]=x;
                  return 1;
              }
         }
        return 0; 
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        while (~scanf("%d%d",&x,&y),x!=-1)jb(x,y);
        int ans=0;
        for (int i=1;i<=n;i++)
         {
             memset(f,0,sizeof f);
             ans+=dfs(i);
         }
        printf("%d
    ",ans); 
        for (int i=1;i<=m;i++)
         if (prime[i])p[prime[i]]=i;
        for (int i=1;i<=n;i++)
         if (p[i])printf("%d %d
    ",i,p[i]); 
    }
  • 相关阅读:
    TCP协议
    各相机品牌型号分类
    思科华为命令对比
    网工笔记(一)
    数学笔记
    word快捷键汇总
    请个假
    word笔记
    ScrollView不能到顶部的解决方法
    Gridview 显示成正方形
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/7688260.html
Copyright © 2011-2022 走看看