POJ 1466 最大独立集

来源:互联网 发布:视频合并软件 安卓版 编辑:程序博客网 时间:2024/05/21 12:50

链接网址:POJ 1466

最大独立集=顶点个数-最大匹配数/2

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define MAXN 505         // 实际问题时需要修改int  mat[MAXN][MAXN];    // 邻接矩阵mat 的0行0列不用 int  nx, ny;             // 实际问题时矩阵的行列数 int  fy[MAXN], matx[MAXN], maty[MAXN]; int  DFS( int  u ) {     int v;       for (v=1;v<=ny;v++)            if (mat[u][v] && fy[v]<0)            {         fy[v]=1;                      if (maty[v]<0 || DFS(maty[v]))                      {   matx[u]=v;    maty[v]=u;   return 1;   }           }       return 0; } int MaximumMatch( ) {int  i, ret=0;memset(matx,-1,sizeof(matx));memset(maty,-1,sizeof(maty));for (i=1;i<=nx;i++) if (matx[i]<0) {memset(fy,-1,sizeof(fy));   ret+=DFS(i);}return ret;}int main(){int t,i,j,k,n,m,mm,x,y; char s1[100],s2[100];while(scanf("%d",&n)!=EOF){    memset(mat,0,sizeof(mat));        nx=n;ny=n;    for(i=0;i<n;i++){            scanf("%s%s",s1,s2);            sscanf(s1,"%d:",&x);            sscanf(s2,"(%d)",&m);    for(j=0;j<m;j++)    {      scanf("%d",&y);      mat[x+1][y+1]=1;        }        }cout<<n-MaximumMatch( )/2<<endl;}//system("pause");    return 0;}


 

 

原创粉丝点击