zoukankan      html  css  js  c++  java
  • poj 3041 Asteroids(二分图最小顶点覆盖)

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

    把X作为n1点集,y作为n2点集,x->y建立二分图,最小顶点覆盖。。

    View Code
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int n,k;
     6 int map[505][505];
     7 int vis[505];
     8 int link[505];
     9 int find(int x)
    10 {
    11     int i;
    12     for(i=1;i<=n;i++)
    13     {
    14         if(map[x][i]&&!vis[i])
    15         {
    16             vis[i]=1;
    17             if(link[i]==0||find(link[i]))
    18             {
    19                 link[i]=x;
    20                 return 1;
    21             }
    22         }
    23     }
    24     return 0;
    25 }
    26 int main()
    27 {
    28     int x,y,i;
    29     scanf("%d%d",&n,&k);
    30     memset(map,0,sizeof(map));
    31     for(i=0;i<k;i++)
    32     {
    33         scanf("%d%d",&x,&y);
    34         map[x][y]=1;
    35     }
    36    int num=0;
    37     for(i=1;i<=n;i++)
    38     {
    39         memset(vis,0,sizeof(vis));
    40         if(find(i))
    41         num++;
    42     }
    43     printf("%d\n",num);
    44     return 0;
    45 }
  • 相关阅读:
    1370
    1336
    1298
    1289
    Buy Tickets(poj2828)
    The Balance(poj2142)
    1067
    Lightoj1011
    1319
    Back to Underworld(lightoj 1009)
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2819700.html
Copyright © 2011-2022 走看看