• [poj] 1422 Air Raid || 最小路径覆盖


    原题

    有n个点和m条有向边,现在要在点上放一些伞兵,然后伞兵沿着图走,直到不能走为止
    每条边只能是一个伞兵走过,问最少放多少个伞兵


    最小路径覆盖棵题,最小路径覆盖=n-最大匹配数

    #include<cstdio>
    #include<cstring>
    #define N 150
    using namespace std;
    int t,n,m,lover[N],e[N][N],ans;
    bool vis[N];
    
    int read()
    {
        int ans=0,fu=1;
        char j=getchar();
        for (;(j<'0' || j>'9') && j!='-';j=getchar()) ;
        if (j=='-') j=getchar(),fu=-1;
        for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
        return ans*fu;
    }
    
    bool find(int x)
    {
        for (int i=1;i<=n;i++)
        {
    	if (e[x][i] && !vis[i])
    	{
    	    vis[i]=1;
    	    if (!lover[i] || find(lover[i]))
    	    {
    		lover[i]=x;
    		return 1;
    	    }
    	}
        }
        return 0;
    }
    
    int main()
    {
        t=read();
        while (t--)
        {
    	ans=0;
    	n=read();
    	m=read();
    	memset(e,0,sizeof(e));
    	memset(lover,0,sizeof(lover));
    	for (int i=1,a,b;i<=m;i++)
    	{
    	    a=read();
    	    b=read();
    	    e[a][b]=1;
    	}
    	for (int i=1;i<=n;i++)
    	{
    	    memset(vis,0,sizeof(vis));
    	    if (find(i)) ans++;
    	}
    	printf("%d
    ",n-ans);
        }
        return 0;
    }
    
  • 相关阅读:
    VC 中 C2275问题解决
    MIPS指令学习
    《高效人士的116个IT秘诀》读书笔记
    Mercurial入门学习
    foobar 插件安装
    五笔输入法的学习记录
    AutoHotKey入门使用
    windows shell
    CSPS 2021霜降记
    ubunru下jdk安装
  • 原文地址:https://www.cnblogs.com/mrha/p/8005894.html
Copyright © 2020-2023  润新知