码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-07-22 00:17:40      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:装备   bsp   lan   target   problem   ref   ons   c++   最大匹配   

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]连续攻击游戏

标签:装备   bsp   lan   target   problem   ref   ons   c++   最大匹配   

原文地址:https://www.cnblogs.com/newera/p/9348195.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!