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



猜你喜欢

转载自lonelone11418485.iteye.com/blog/2073736