大致题意:
就是裸的二分图最大匹配,但是数据量达到10000,所以邻接表不再适用,要使用邻接矩阵存储。
大致思路:
没想到照着邻接矩阵的改改就行了。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int nMax=20005;
class edge{
public:
int v,nex;
};edge e[200005];
int n,m,k,head[nMax];
int link[nMax];
bool vis[nMax];
void addedge(int b,int a){//向图中加边的算法,注意加上的是有向边//b为a的后续节点既是a---->b
e[k].v=a;
e[k].nex=head[b];
head[b]=k;k++;
}
bool dfs(int u){
for(int i = head[u]; i != 0; i = e[i].nex){
int v = e[i].v;
if(!vis[v]){
vis[v] = true;
if(link[v] == -1 || dfs(link[v])){
link[v] = u;
return true;
}
}
}
return false;
}
int main(){
int ans=0,i,j,a,b,c;
while(scanf("%d",&n)!=EOF){
k=1;
memset(head,0,sizeof(head));
for(i=0;i<n;i++){
scanf("%d: (%d)",&a, &b);
a++;
while(b--){
scanf("%d",&c);
c-=(n-1);
addedge(a,c);
}
}
ans=0;
memset(link,-1,sizeof(link));
for(i = 1; i <= n; i ++){
memset(vis,0,sizeof(vis));
if(dfs(i)) ans++;
}
printf("%d\n", ans);
}
return 0;
}
分享到:
相关推荐
在计算机科学中,我们通常使用两种主要的方法来存储图:邻接矩阵和邻接表。这两种方法各有优缺点,适用于不同的场景。 ### 邻接矩阵 **邻接矩阵** 是一种直观的图存储方式,它使用一个二维数组来表示图中的边。...
邻接表法建立图程序代码 邻接表法是图的存储结构之一,通过建立邻接表来存储图的信息。在这里,我们将详细介绍邻接表法建立图程序代码的知识点。 图的定义 在图论中,图是由节点和边组成的。节点是图的基本元素,...
- **图的基本概念**:掌握无向图、有向图、邻接矩阵、邻接表等基本概念。 - **最短路径算法**:包括Dijkstra算法、Bellman-Ford算法、Floyd算法等。 - **示例题目**: - POJ 1860: Dijkstra算法应用 - POJ 3259: ...
【邻接表法】是图数据结构的一种存储方式,它主要解决了在表示图时空间效率的问题,特别是对于稀疏图的存储。在邻接表法中,图中的每个顶点都有一个链表,链表中存储的是与该顶点相连的所有其他顶点。这种存储方式...
本文将详细讲解如何使用邻接链表法来实现图,并介绍上述描述中的各项操作。 1. **创建图**:创建图通常涉及到定义节点(Vertex)和边(Edge)的数据结构。节点可以存储一个标识符(如整数或字符串),而边则存储...
在“C语言数据结构邻接表课程设计”中,我们将深入探讨如何利用C语言实现数据结构中的邻接表,这是图论中一个重要的抽象概念。邻接表是表示图的有效方式,尤其对于稀疏图(边的数量远小于顶点数量的平方)来说,它的...
**邻接表和逆邻接表是图论中两种重要的数据结构,用于高效地存储和操作图的信息。** **邻接表**是一种节省空间的图的存储方式,尤其适用于稀疏图(边的数量远小于顶点数量的平方)。在邻接表中,每个顶点都有一个...
### 图的邻接表C++表示 在计算机科学领域,图是一种重要的数据结构,用于模拟对象之间的关系。根据图中的边是否具有方向性,可以将图分为无向图和有向图。对于稀疏图(即边的数量远小于顶点数量的平方),邻接表是...
在编程中,有多种方法来存储图,其中两种常用的方法是邻接矩阵和邻接表。这两种方法各有优缺点,适用于不同类型的图和不同的操作需求。 邻接矩阵是一种二维数组,其中的每个元素代表两个顶点之间是否存在边。如果...
在计算机科学和图论中,邻接矩阵和邻接表是两种常见的表示图的数据结构。本文将详细讨论这两种数据结构,以及如何在MATLAB中进行转换。我们将专注于标题和描述中提到的MATLAB程序,该程序能够将邻接表转换为邻接矩阵...
1. **邻接矩阵**:邻接矩阵是用二维数组来表示图的邻接关系,其中的元素通常是二进制值,表示图中节点之间的连接情况。如果节点i与节点j之间存在边,则邻接矩阵中的元素`matrix[i][j]`为1,否则为0。对于无向图,...
本主题将深入探讨“图”的一种高效表示方法——邻接表。 邻接表是图数据结构的一种高效实现,特别适用于稀疏图(边的数量远小于顶点数量的平方)。在邻接表中,每个顶点都有一个链表或数组,存储与之相连的所有顶点...
1、 掌握图的结构特征以及四种存储结构(数组表示法、邻接表、十字链表和邻接多重表)的特点和程序设计方法。 2、 掌握在邻接矩阵或邻接表存储结构下图的深度优先和广度优先遍历算法的设计方法。 3、 进一步掌握递归...
#### 二、邻接表的基本结构 邻接表由两部分组成:一个数组和一个链表。数组的每个元素对应图中的一个顶点,该元素指向一个链表。链表中的每个节点存储了与当前顶点相邻的所有其他顶点的信息。这种结构使得查找特定...
### 二、头歌数据结构图的邻接表存储 #### 1. 数据类型定义 - **顶点类型**:`VertexType` 定义为一个字符数组,用于存储顶点的名称。 - **图的种类**:`GraphKind` 定义了四种类型的图:有向图 (DG)、有向网 (DN)...
邻接表相比于邻接矩阵(一个二维数组来表示所有节点之间的连接)的优点在于空间效率。对于稀疏图(边的数量远小于节点数量的平方),邻接表只需要存储实际存在的边,而邻接矩阵则会浪费大量空间来存储不存在的边。 ...
数据结构中用邻接表求解迷宫问题,该算法运用了简单的原理,但是非常实用的解决了迷宫问题
完成“数据结构作业 邻接表”可能涉及以下内容:理解图的概念、邻接表的结构、如何用代码实现邻接表、以及如何使用邻接表进行DFS和BFS。通过这项作业,你可以深入理解数据结构的重要性,并提高解决实际问题的能力。...
在数据结构领域,邻接表是一种非常重要的图数据结构,尤其适用于存储稀疏图,即边的数量远小于顶点数量的平方。本文将详细讲解邻接表的概念、优点以及如何用C++实现。 邻接表是由一系列顶点的链表组成,每个链表...
【以邻接表的形式建立和存储图】 在图论中,图是由顶点(节点)和边(连接顶点的线)构成的数据结构。在计算机科学中,为了高效地存储和操作图,我们通常会使用不同的数据结构来表示图。其中,邻接表是一种常用的...