zoukankan      html  css  js  c++  java
  • codevs 2494 Vani和Cl2捉迷藏

    传送门

    2494 Vani和Cl2捉迷藏

     时间限制: 1 s
     空间限制: 32000 KB
     题目等级 : 钻石 Diamo
     
    题目描述 Description

      vani和cl2在一片树林里捉迷藏……

      这片树林里有N座房子,M条有向道路,组成了一张有向无环图。
      树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔。如果从房子A沿着路走下去能够到达B,那么在A和B里的人是能够相互望见的。
      现在cl2要在这N座房子里选择K座作为藏身点,同时vani也专挑cl2作为藏身点的房子进去寻找,为了避免被vani看见,cl2要求这K个藏身点的任意两个之间都没有路径相连。
      为了让vani更难找到自己,cl2想知道最多能选出多少个藏身点?

    输入描述 Input Description

      第一行两个整数N,M。
      接下来M行每行两个整数x、y,表示一条从x到y的有向道路。

    输出描述 Output Description

      一个整数K,表示最多能选取的藏身点个数。

    样例输入 Sample Input

    4 4
    1 2
    3 2
    3 4
    4 2

    样例输出 Sample Output

    2

    数据范围及提示 Data Size & Hint

      对于20% 的数据,N≤10,M<=20。
      对于60% 的数据, N≤100,M<=1000。
      对于100% 的数据,N≤200,M<=30000,1<=x,y<=N。

    【思路】

    floyed+二分图匹配最大独立集

    最大独立集=n-最大匹配

    【Code】

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int cnt,n,m,ans,x,y;
    int vis[210],map[210][210],match[210];
    bool path(int x)
    {
        for(int i=1;i<=n;i++)
        {
            if(!vis[i]&&map[x][i])
            {
                vis[i]=1;
                if(!match[i]||path(match[i]))
                {
                    match[i]=x;
                    return 1;
                }
            }
        }
        return 0;
    }
    int main()
    {
        scanf("%d%d",&n,&m);ans=n;
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&x,&y);
            map[x][y]=1;
        }
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
            for(int  j=1;j<=n;j++)
            map[i][j]=map[i][j]||(map[i][k]&&map[k][j]);
            for(int i=1;i<=n;i++)
            {
                memset(vis,0,sizeof(vis));
                if(path(i))cnt++;
            }
            printf("%d
    ",ans-cnt);
            return 0;
    }
  • 相关阅读:
    Leetcode Plus One
    Leetcode Swap Nodes in Pairs
    Leetcode Remove Nth Node From End of List
    leetcode Remove Duplicates from Sorted Array
    leetcode Remove Element
    leetcode Container With Most Water
    leetcode String to Integer (atoi)
    leetcode Palindrome Number
    leetcode Roman to Integer
    leetcode ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/zzyh/p/6957040.html
Copyright © 2011-2022 走看看