[P1640][SCOI2010]连续攻击游戏

Posted newera

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[P1640][SCOI2010]连续攻击游戏相关的知识,希望对你有一定的参考价值。

Link:

P1640 传送门

Solution:

可以发现这道题其实是属性值集合和装备集合的对应,且每个点只能用一次

那么就能想到二分图最大匹配,一旦不可行直接退出就行了

 

Tip:

1、$Hungry$算法连有向边就行了……

2、注意左右两个集合范围不同!

Code:

#include <bits/stdc++.h>

using namespace std;
const int MAXN=1e4+5;//边数和Y集合点数都为1e6级别 
struct edge{int nxt,to;}e[2000005];
int n,x,y,match[1000005],vis[MAXN],head[MAXN],tot;

void add(int from,int to)
{e[++tot].nxt=head[from];e[tot].to=to;head[from]=tot;}

int dfs(int u)
{
    vis[u]=true;
    for(int i=head[u];i;i=e[i].nxt)
    {
        int m=match[e[i].to];
        if(m==-1||!vis[m]&&dfs(m))
        {match[e[i].to]=u;return 1;}
    }
    return 0;
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)//Hungry直接连单向边就行了 
        scanf("%d%d",&x,&y),add(x,i),add(y,i);
        
    int res=0;memset(match,-1,sizeof(match));
    for(int i=1;i<=10000;i++)
    {
        memset(vis,0,sizeof(vis));
        if(dfs(i)) res++;
        else break;
    }
    printf("%d",res);
    return 0;
}

 

以上是关于[P1640][SCOI2010]连续攻击游戏的主要内容,如果未能解决你的问题,请参考以下文章

并查集 洛谷P1640 [SCOI2010]连续攻击游戏

P1640 [SCOI2010]连续攻击游戏

[P1640][SCOI2010]连续攻击游戏

洛谷—— P1640 [SCOI2010]连续攻击游戏

P1640 [SCOI2010]连续攻击游戏

洛谷 P1640 BZOJ 1854 [SCOI2010]连续攻击游戏