zoukankan      html  css  js  c++  java
  • 聚会

    Description
      Tzdin想组织一个圣诞晚会。N位女士和M位男士(M>=N)会被邀请参加这个聚会。在聚会的开始,Tzdin会派发一些写着某位男士信息的卡片给每位女士;每位女士都会收到若干张这种卡片。然后每位女士可以从她收到的卡片里挑选一位男士作为她的伴侣。我们可以认为经过Tzdin的引导,每位女士都一定可以挑选到一位男士作为他的伴侣,而每位男士最多成为1位女士的伴侣。Tzdin想知道的是,有哪些男士,无论女士们怎么选择,最终都一定会拥有伴侣。

    Input
      第一行包括2个正整数N和M。
      接下来有N行。对于1<=i<=N,有:在第i+1行中,第一个整数k,代表第i位女士收到了k张卡片;接下来有k个正整数,代表的是每张卡片上对应的男士的编号。
      女士和男士的编号分别是从1到N和1到M。

    Output
      输出若干行,每行为一个整数,代表某位男士的编号;那位男士必须是一定会拥有伴侣的客人。请按照从小到大的顺序输出他们的编号。

    Sample Input
    2 3
    1 1
    2 2 3

    Sample Output
    1

    Data Constraint

    Hint
    【数据范围】
      对20%的数据,有N,M<=10;
      对40%的数据,有N,M<=100;
      对100%的数据,有N,M<=1000。

    .
    .
    .
    .
    .
    .
    分析
    首先先做一次匈牙利,处理出匹配数组 f,f[i]f[i] 表示第 i 位男士匹配了第 f[i] 为女士。
    之后枚举每一位男士 i, 将第 f[i]位女士重新匹配(不能匹配男士 i),
    如果还能匹配上就说明男士 i 不是必需的,如果不能匹配了就是必须的。
    这样就能通过本题了。
    (一开始把某个地方打反,直接爆0)
    .
    .
    .
    .
    .
    程序:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    bool f[1001][1001],bz[2000];
    int a[2000];
    int n,m;
    
    bool find(int x,int y)
    {
    	for (int i=1;i<=m;i++)
    		if (f[x][i]&&!bz[i]&&i!=y)
    		{
    			bz[i]=true;
    			int w=a[i];
    			a[i]=x;
    			if (w==0||find(w,y)) return true;
    			a[i]=w;
    		}
    	return false;
    }
    
    int main()
    {
    	scanf("%d%d",&n,&m);
    	memset(f,false,sizeof(f));
    	for (int i=1;i<=n;i++)
    	{
    		int n1;
    		scanf("%d",&n1);
    		for (int j=1;j<=n1;j++)
    		{
    			int x;
    			scanf("%d",&x);
    			f[i][x]=true;
    		}
    		
    	}
    	for (int i=1;i<=n;i++)
    	{
    		memset(bz,false,sizeof(bz));
    		find(i,-1);
    	}
    	for (int i=1;i<=m;i++)
    	{
    		if (a[i]==0) continue;
    		memset(bz,false,sizeof(bz));
    		int b[2000];
    		memcpy(b,a,sizeof(b));
    		int x=a[i];
    		a[i]=0;
    		if (find(x,i)==false) printf("%d
    ",i);
    		memcpy(a,b,sizeof(a));
    	}
    	return 0;
    }
    
  • 相关阅读:
    LUSE: 无监督数据预训练短文本编码模型
    LM-MLC 一种基于完型填空的多标签分类算法
    一种基于均值不等式的Listwise损失函数
    知识蒸馏基本知识及其实现库介绍
    自然语言处理中的负样本挖掘
    milvus和faiss安装及其使用教程
    Pyinstaller打包通用流程
    自我介绍
    作业十二
    作业十一
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/11094933.html
Copyright © 2011-2022 走看看