poj1469二分图

  题意: 给你一个二分图,求最大匹配是否是 课程这边集合的顶点数。

数组开错了 wa了数次。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <string>
#include <iostream>
#include <map>
#include <cstdlib>
#include <list>
#include <set>
#include <queue>
#include <stack>
#include<math.h>
using namespace std;

int Map[305][306];
int link[305];
int used[305];
int p;int n;
int dfs(int x)
{
    int temp;
    for(int i=1;i<=n;i++){
        if(!used[i]&&Map[x][i]){
            used[i]=1;
            if(link[i]==-1||dfs(link[i])){
                link[i]=x;
                return 1;
            }
        }
    }
    return 0;
}

void solve()
{
    int ans=0;
    memset(link,-1,sizeof(link));
    for(int i=1;i<=p;i++){
        memset(used,0,sizeof(used));
        if(dfs(i)) ans++;
    }
    if(ans==p) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}
int main()
{
    int T;int c;
    scanf("%d",&T);
    while(T--){
        memset(Map,0,sizeof(Map));
        scanf("%d%d",&p,&n);
        for(int i=1;i<=p;i++){
            scanf("%d",&c);
            for(int j=0;j<c;j++){
                int t;
                scanf("%d",&t);
                Map[i][t]=1;
            }
        }
        solve();
    }
    return 0;
}

poj1469二分图

时间: 2024-10-14 00:43:35

poj1469二分图的相关文章

poj1469 二分图匹配(匈牙利算法)

poj1469 course code: #include<cstdio> #include<cstring> using namespace std; #define P 110 #define N 310 int map[P][N]; int match[N]; bool use[N]; int p, n; bool find(int u) //u是课程 { for(int i = 1; i <= n; ++i) { if(!use[i] && map[u

ACM训练大纲

1. 算法总结及推荐题目 1.1 C++ STL ? STL容器: set, map, vector, priority_queue, queue, stack, deque, bitset? STL算法: sort, unique, nth_element, reverse, rotate, next_permution, find, for_each, count, lower_bound, max, swap, random_shuffle 1.2 基本算法 ? 枚举: poj1753,

ACM学习资料整理

ACM学习资料整理 声明:参考泥瓦匠BYSocket.POJ题目分类推荐 (很好很有层次感)整理所得 1 推荐题库 ?http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以baidu 一个叫NOCOW 的网站.   ?http://livearchive.onlinejudge.org/ 上面有全部的赛区真题,绝大部分都可以提交,不适合当题库刷,不过在这里找题非常方便.

裸二分图匹配poj1469

poj1496 题意: 给你p门课程和n个学生,一个学生可以选0门,1门,或者多门课程, 现在要求一个由p个学生组成的集合,满足下列2个条件: 1.每个学生选择一个不同的课程 2.每个课程都有不同的代表 如果满足,就输出YES POJ 3041 Asteroids 问题: 假如你现在正处在一个N*N的矩阵中,这个矩阵里面有K个障碍物. 你拥有一把武器,一发弹药一次能消灭一行或一列的障碍物,求最小的弹药消灭全部障碍物 输入为: N K 接下来有K行, 每行包含障碍物的坐标, 即r行c列; 如: 3

POJ1469 COURSES 【二分图最大匹配&amp;#183;HK算法】

COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17777   Accepted: 7007 Description Consider a group of N students and P courses. Each student visits zero, one or more than one courses. Your task is to determine whether it is poss

POJ1469 COURSES 二分图匹配 匈牙利算法

原文链接http://www.cnblogs.com/zhouzhendong/p/8232649.html 题目传送门 - POJ1469 题意概括 在一个大矩阵中,有一些障碍点. 现在让你用1*2的小矩形覆盖非障碍点,要求不覆盖到障碍点并且不重复覆盖,问是否可以覆盖所有非障碍点. 题解 本题几乎是裸题. 首先注意读入的表示障碍点的二元组(x,y)中y是行,x是列. 这个毒性深重<差评> 然后考虑算法.读者可以参考笔者的前一篇博客. 对于相邻的非障碍点我们来回都建边.然后我们给原图按照到某一

最小点覆盖,二分图最大匹配—POJ1274 POJ1469 POJ1469

二分图最大匹配常用的匈牙利算法,之前写的很幼稚,虽然也过了,但是平白的比别人多开了两倍的空间. 本来就是在填加边的时候把左边的点和右边的点分开算都加在图里面储存,然后匹配的时候就互相匹配 match[u]=v; match[v]=u; 然后看了模板之后才发现其实完全不用加上,只记录match[v]=u就可以了 三题的代码都是一样的,需要注意的是1469题是要求求最小点覆盖数,最小点覆盖数就等于最大匹配数. 简单说下. 首先,最小点覆盖数肯定不会小于匹配数,因为那样连已经匹配的边都没法覆盖掉,何谈

二分图匹配——poj1469

关于本题二分图的匹配关系始终是加单向边用左边去匹配右边,match表示的是右边的人匹配的对应的左边的点 /* 关于本题二分图的匹配 链接的关系始终是单向边 用左边去匹配右边,match表示的是右边的人匹配的对应的左边的点 */ #include<iostream> #include<cstring> #include<cstdio> using namespace std; #define maxn 505 int mp[maxn][maxn],match[maxn];

POJ1469 COURSES 【二分图最大匹配&#183;HK算法】

COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17777   Accepted: 7007 Description Consider a group of N students and P courses. Each student visits zero, one or more than one courses. Your task is to determine whether it is poss