• Asteroids


    http://poj.org/problem?id=3041

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<vector>
     5 using namespace std;
     6 const int MAXN=555;
     7 int n,k;
     8 bool use[MAXN];
     9 int from[MAXN],ans;
    10 vector<int>g[MAXN];
    11 bool match(int x)
    12 {
    13     for(int i=0;i<g[x].size();i++)
    14     {
    15         if(!use[g[x][i]]){
    16             use[g[x][i]]=true;
    17             if(from[g[x][i]]==-1||match(from[g[x][i]])){
    18                 from[g[x][i]]=x;
    19                 return true;
    20             }
    21         }
    22     }
    23     return false;
    24 }
    25 
    26 int hun()
    27 {
    28 
    29     ans=0;
    30     memset(from,255,sizeof(from));
    31     for(int i=1; i<=n; i++)
    32     {
    33         memset(use,false,sizeof(use));
    34         if(match(i))
    35         ans++;
    36     }
    37     return ans;
    38 }
    39 int main()
    40 {
    41     int a,b;
    42    while(scanf("%d%d",&n,&k)!=EOF){
    43     for(int i=1;i<=k;i++)
    44     {
    45         scanf("%d%d",&a,&b);
    46         g[a].push_back(b);
    47     }
    48     printf("%d
    ",hun());
    49    }
    50     return 0;
    51 }
    View Code
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<vector>
     5 using namespace std;
     6 const int MAXN=520;
     7 int n,k;
     8 bool use[MAXN];
     9 int match[MAXN],ans;
    10 int g[MAXN][MAXN];
    11 bool dfs(int x)
    12 {
    13     for(int i=1;i<=n;i++)
    14     {
    15         if(!use[i]&&g[x][i]){
    16             use[i]=true;
    17             if(match[i]==-1||dfs(match[i])){
    18                 match[i]=x;
    19                 return true;
    20             }
    21         }
    22     }
    23     return false;
    24 }
    25 
    26 int hun()
    27 {
    28 
    29     ans=0;
    30     memset(match,-1,sizeof(match));
    31     for(int i=1; i<=n; i++)
    32     {
    33         memset(use,false,sizeof(use));
    34         if(dfs(i))
    35         ans++;
    36     }
    37     return ans;
    38 }
    39 int main()
    40 {
    41     int a,b;
    42     while(scanf("%d%d",&n,&k)!=EOF)
    43     {
    44         memset(g,0,sizeof(g));
    45         for(int i=1; i<=k; i++)
    46         {
    47             scanf("%d%d",&a,&b);
    48              g[a][b]=1;
    49         }
    50         printf("%d
    ",hun());
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    解决微信OAuth2.0网页授权回调域名只能设置一个的问题
    js中window.location.search的用法和作用。
    在T-SQL语句中访问远程数据库
    C# 解析 json
    C#后台执行JS
    WhereHows前后端配置文件
    jar打包混淆上传全自动日志
    quartz中设置Job不并发执行
    解决eclipse maven 项目重新下载包这个问题
    Sublime Text 3中文乱码问题解决(最新)
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3254317.html
Copyright © 2020-2023  润新知