hdu 1068 解题报告

  题意:大学二年级的时候,一些同学开始研究男女同学之间的缘分。研究者试图找到没有缘分同学的最大集。程序的结果是要输出这个集合中学生的数量。

  解题思路:根据题意可将题目转化成求二分图的最大独立集=节点数—最大匹配数。题目中并没有指明男生女生,真正的匹配数因该是m/2,那么v=n-m/2.

  代码:

  #include<iostream>
using namespace std;
int n,m,che[500],g[500][500],match[500];
int dfs(int k)
{
    int i,t;
    for(i=0;i<=m;i++)
    {
      if(!che[i]&&g[k][i])
      {
         t=match[i];match[i]=k;che[i]=1;
         if(t==-1||dfs(t)) return 1;
         match[i]=t;
      }
   }
   return 0;
}
int maxmatch()
{
    int i,ans=0;
    for(i=0;i<=n;i++)
    {
       memset(che,0,sizeof(che));
       if(dfs(i)) ans++;
    }
    return ans;
}
int main() 
{   
   int t; 
   int i,a,b,c; 
   while(scanf("%d",&t)!=-1) 
   {    
       n=t;m=t; 
       memset(g,0,sizeof(g));
       memset(match,-1,sizeof(match)); 
       while(t--) 
      {   
           scanf("%d: (%d)",&a,&b);        
           for(i=0;i<b;i++)            
           {    
               scanf("%d",&c); 
               g[a][c]=1; 
           } 
       } 
       printf("%d\n",n-(maxmatch()/2)); 
   } 
    return 0;
}   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值