zoukankan      html  css  js  c++  java
  • POJ 1422

     1 #include <iostream>
     2 #define MAXN 350
     3 using namespace std;
     4 
     5 int mat[MAXN][MAXN];
     6 bool mark[MAXN];
     7 int match[MAXN];
     8 int graph_match(int n,int mat[][MAXN],int * match);
     9 int main()
    10 {
    11     //freopen("acm.acm","r",stdin);
    12     int test;
    13     int n;
    14     int m;
    15     int u;
    16     int v;
    17     int i;
    18     int j;
    19     cin>>test;
    20     while(test --)
    21     {
    22         memset(mat,0,sizeof(mat));
    23         memset(match,-1,sizeof(match));
    24         cin>>n;
    25         cin>>m;
    26         for(i = 0; i < m; ++ i)
    27         {
    28             cin>>u;
    29             cin>>v;
    30             -- u;
    31             -- v;
    32             mat[u][v+n] = 1;
    33         }
    34 
    35         cout<<n-graph_match(n*2,mat,match)<<endl;
    36     }
    37 
    38 }
    39 
    40 
    41 //一般图最大匹配,邻接阵形式,复杂度O(n^3)
    42 //返回匹配顶点对数,match返回匹配,未匹配顶点match值为-1
    43 //传入图的顶点数n和邻接阵mat
    44 //graph_match()为最终调用函数
    45 
    46 int aug(int n,int mat[][MAXN],int* match,int* v,int now){
    47     int i,ret=0;
    48     v[now]=1;
    49     for (i=0;i<n;i++)
    50         if (!v[i]&&mat[now][i]){
    51             if (match[i]<0)
    52                 match[now]=i,match[i]=now,ret=1;
    53             else{
    54                 v[i]=1;
    55                 if (aug(n,mat,match,v,match[i]))
    56                     match[now]=i,match[i]=now,ret=1;
    57                 v[i]=0;
    58             }
    59             if (ret)
    60                 break;
    61         }
    62     v[now]=0;
    63     return ret;
    64 }
    65 int graph_match(int n,int mat[][MAXN],int * match){
    66     int v[MAXN],i,j;
    67     for (i=0;i<n;i++)
    68     v[i]=0,match[i]=-1;
    69     for (i=0,j=n;i<n&&j>=2;)
    70         if (match[i]<0&&aug(n,mat,match,v,i))
    71             i=0,j-=2;
    72         else
    73             i++;
    74     for (i=j=0;i<n;i++)
    75         j+=(match[i]>=0);
    76     return j/2;
    77 }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    腾讯新闻评论数据爬取
    腾讯新闻评论数据爬取
    腾讯新闻评论数据爬取
    Storm系统架构以及代码结构学习
    Storm系统架构以及代码结构学习
    Storm系统架构以及代码结构学习
    网络新闻评论观点挖掘系统实现
    网络新闻评论观点挖掘系统实现
    网络新闻评论观点挖掘系统实现
    Confluence 6 配置验证码(Captcha)来防止垃圾
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563387.html
Copyright © 2011-2022 走看看