poj1466

具体:http://www.verydemo.com/demo_c92_i155183.html

这题考察的是最大独立集问题,  算是裸的二分匹配, 只要在计算上添加一个n - count/2 就可以直接得出结果了。

不管是男的还是女的都一样,因为你男的算一边,女的再算一遍,这样算两遍, 不管你这个学号是男的还是女的,一点影响都没有。

#include
#include
 maxn 505

 e[maxn][maxn], n, m, dist[maxn], visit[maxn];

 Init()
{
     i, j, u, v, num;
     chr;

    memset(e, , (e));
    memset(dist, , (dist));
    
     (i=; i<= n; i++)
    {
        scanf(, &u);
        u++;
         (scanf(, &chr), chr!= );
         (scanf(, &chr), chr!= );
        scanf(, &num);
         (scanf(, &chr), chr!= );
        
        
         (j=; j<=num; j++)
        {
            scanf(, &v);
            v++;
            e[u][]++; e[u][e[u][]] = v;
        }
    }
    ;
}

 Dfs( now)
{
     i, v;
    
     (i=; i<=e[now][]; i++)
    {
        v = e[now][i];
         (visit[v] ==  );
        visit[v] = ;
         (dist[v] ==  || Dfs(dist[v]) == )
        {
            dist[v] = now;
             ;
        }
    }
     ;
}

 Funs()
{
     i, count = ;
    
     (i=; i<=n; i++)
    {
        
        memset(visit, , (visit));
         (Dfs(i) == )count ++;
        
    }
    printf(, n - count/);
     ;
}

 main()
{
     (scanf(, &n)!= EOF)
    {
        Init();
        Funs();
    }
     ;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值