HDU 1054

原创 2013年12月03日 21:32:29

 这道题目是二分匹配,我一开始用的是邻接矩阵,却交上去超时了,
 于是我想到教主说的用vector来存二维数组,但是不太熟悉,后来
  看了匡斌的博客里面就有这样写的模板,就看了看,
  代码如下:
  #include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=1505;
int dist[maxn];
bool vis[maxn];
vector<int>mp[maxn];
int n,m,k;


bool dfs(int a)
{
    for(int i=0; i<mp[a].size(); i++)
    {
        if(!vis[mp[a][i]])
        {
            vis[mp[a][i]]=true;
            if(dist[mp[a][i]]==-1||dfs(dist[mp[a][i]]))
            {
                dist[mp[a][i]]=a;
                return true;
            }
        }
    }
    return false;
}


int ff()
{
    int ans=0;
    memset(dist,-1,sizeof(dist));
    for(int i=0; i<n; i++)
    {
        memset(vis,false,sizeof(vis));
        if(dfs(i))ans++;
    }
    return ans;
}




int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0; i<maxn; i++)
              mp[i].clear();
        for(int i=0; i<n; i++)
        {
            scanf("%d:(%d)",&m,&k);
            while(k--)
            {
                int x;
                scanf("%d",&x);
                mp[m].push_back(x);
                mp[x].push_back(m);
            }
        }
        printf("%d\n",ff()/2);
    }
    return 0;
}

hdu 1054 Strategic Game 最小顶点覆盖(二分图最大匹配)

#include #include #include #include #include #include using namespace std; const int maxn=1510...
  • a601025382s
  • a601025382s
  • 2013年09月06日 20:51
  • 1230

hdu 1054 最小点覆盖

二分图中,最小点覆盖=最大匹配 这个是二分图。求出最大匹配/2, 因为每个匹配我们计算了两次 //by dezhonger #include #include #include #inclu...
  • dezhonger
  • dezhonger
  • 2015年08月09日 00:09
  • 223

hdu 1054 最小点覆盖

这题就是运用到了二分图的三个重要结论之一: 最小点覆盖数: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数 最小路径覆盖=...
  • u010523907
  • u010523907
  • 2014年03月01日 14:38
  • 710

HDU 1054 最小定点覆盖

点击打开链接 题意:一个顶点要一个人放哨,则和他相连的几个定点就不需要人放哨了,问最少需要多少人放哨 思路:很明显的题意,很明显的最小顶点覆盖,最小顶点覆盖=最大匹配,建个双向边,结果除2,我的二...
  • Dan__ge
  • Dan__ge
  • 2016年04月01日 13:39
  • 466

hdu 1054 树的最小点覆盖

点击打开链接 资料 定义2对于图G=(V,E)来说, 最小点覆盖 指的是从V中取尽量少的点组成一个集合,使得E中所有的边都与取出来的点相连。也就是说,设V‘是图G的一个顶点覆盖,则对于图中的任...
  • Jeremy1149
  • Jeremy1149
  • 2016年09月20日 12:58
  • 163

hdu 1054(简单的树形dp)

/* 【题意】 给定一棵树,标记一节点,则与该节点所连的边都被标记,问最少需要标记多少个节点使得所有边都被标记; 或者说给定一个树型城堡,在交叉路口放一个士兵,则与该路口相连的路都被...
  • weiwei2012start
  • weiwei2012start
  • 2013年04月18日 12:34
  • 918

HDOJ 题目1276士兵队列训练问题(队列,模拟)

 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...
  • yu_ch_sh
  • yu_ch_sh
  • 2014年08月29日 22:19
  • 461

PAT乙级—1054. 求平均值 (20)-native

本题的基本要求非常简单:给定N个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位。当你计算平均值的时候,...
  • wanmeiwushang
  • wanmeiwushang
  • 2016年06月04日 21:19
  • 1852

hdu 1054 Strategic Game【最小顶点覆盖】

Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others...
  • mengxiang000000
  • mengxiang000000
  • 2016年03月14日 18:14
  • 478

HDU 1054 Strategic Game (最小顶点覆盖)

刚开始想得难了,打算把二分图建出来,把顶点分开!其实不用,直接对原图求最大匹配,然后除以2. 这里刚开始敲模板,把下标弄错了,题目是从0开始,我直接从1开始!还有一件事情,一定一定要记得,就是给bm...
  • AClion
  • AClion
  • 2013年05月07日 22:27
  • 699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 1054
举报原因:
原因补充:

(最多只允许输入30个字)