首页 > 其他分享 >Codeforces Round #170 (Div. 1) A. Learning Languages(连通块+dfs)

Codeforces Round #170 (Div. 1) A. Learning Languages(连通块+dfs)

时间:2022-10-10 17:37:21浏览次数:90  
标签:语言 idx int LL Codeforces dfs Languages input

https://codeforces.com/contest/277/problem/A

题目大意:

有n个人,有m种语言;

这n个人分别会一些(也有可能会0种);

问我们他们能否直接或者间接的交流?

如果不能的话,一个人去学习一门语言需要一块钱,我至少要准备多少钱才能够实现全部人的直接或间接交流?
input 
5 5
1 2
2 2 3
2 3 4
2 4 5
1 5
output 
0
input 
8 7
0
3 1 2 3
1 1
2 5 4
2 6 7
1 3
2 7 4
1 1
output 
2
input 
2 2
1 2
0
output 
1

数据范围都在100之内,特别小,所以我们直接暴力建边+dfs是没有问题的
但是需要格外注意一下特判全部同学的语言学习为0的时候

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=200200,M=2002;
LL n,m,idx,t;//总共有n个人,m种语言
LL sum=0,res=0;
LL vis[N],a[M][M],f[M][M];//判断是否经过(联通)
void dfs(int x)
{
    vis[x]=1;
    for(int j=1;j<=n;j++)
    {
        //没跑过这个j点并且有一条路连接
        if(!vis[j]&&f[x][j])
            dfs(j);
    }
}
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>idx;
            if(idx==0) sum++;//特判,一门语言都没学的话,那必须整一个
            while(idx--)
            {
                cin>>t;
                a[i][t]=1;//第i个人会第t种语言
            }
        }
        //联通
        for(int i=1;i<=n;i++)//一个人
        {
            for(int j=i+1;j<=n;j++)//和另一个人
            {
                for(int k=1;k<=m;k++)//判断语言
                {
                    if(a[i][k]&&a[j][k])//他会她也会
                    {
                        f[i][j]=1;//邻接矩阵
                        f[j][i]=1;
                    }
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(!vis[i])
            {
                res++;
                dfs(i);
            }
        }
        if(sum==n) cout<<n<<endl;
        else cout<<res-1<<endl;
    }
    return 0;
}

标签:语言,idx,int,LL,Codeforces,dfs,Languages,input
From: https://www.cnblogs.com/Vivian-0918/p/16776490.html

相关文章

  • Educational Codeforces Round 136 (Rated for Div. 2) D - Reset K Edges
    题目来源:EducationalCodeforcesRound136(RatedforDiv.2)D题目链接:Problem-D-Codeforces 题意给定一棵以1为根、大小为n的树,每次操作可以将一棵子树接到根......
  • Codeforces Round #694 (Div. 1) - B. Strange Definition
    数论Problem-B-Codeforces题意给定\(n\;(1<=n<=3*10^5)\)个数\(a[i]\),\(1<=a[i]<=10^6\)把\(a[i]\)看做是n个点的点权如果\(\frac{lcm(a[i],a[j])}{gc......
  • Codeforces:B. New Year and Ascent Sequence[模拟]
    题面Asequencea=[a1,a2,…,al]oflengthlhasanascentifthereexistsapairofindices(i,j)suchthat1≤i<j≤landai<aj.Forexample,thesequence[0,2......
  • 实现fastdfs防盗链功能
    目录1、背景2、实现原理2.1开启防盗链2.2重启nginx2.3Java代码生成token1、token生成规则2、java生成token3、测试3.1带正确token访问3.2带错误token访问4、项目代码......
  • Codeforces Round #800 div1 B
    B.FakePlasticTrees看了第三个样例发现一个节点可以由他的几个子节点一起构成我们首先自下而上的看肯定叶子节点越大越好这样我们选择的空间就会越多再者要是我们......
  • 「题解」Codeforces 1572B Xor of 3
    我知道你很急,但你先别急。我急了我急了我急了。如果直接上去莽构造的话,很可能就是像我一样大分讨的后果。先特判掉全是1,或者1的个数是奇数的情况。我的做法是考虑所......
  • HDFS集群角色与职责
    首先,让我们看一下官方的HDFS架构图,从上面能看到Namenode,Datanode,除此之外还有Secondarynode  主角色:NamenodeNamenode是Hadoop分布式文件系统的核心,架构中的主角色。......
  • Codeforces Round #822 (Div. 2)
    A题意给一个长为n的数组,每次可以对其中某个数做+1或-1的操作。求最小的操作次数,使得可以从数组中选出三个相同的数。思路很容易可以想到选三个最接近的数然后操作。也......
  • SpringBoot整合fastdfs
    1、背景在前一节中,我们搭建了一个单机版的fastdfs服务,此处我们将fastdfs与springboot进行整合,实现文件的上传和下载。2、整合步骤2.1、引入依赖<dependency><group......
  • SpringBoot整合fastdfs
    目录1、背景2、整合步骤2.1、引入依赖2.2、引入fastdfs配置2.3编写文件上传和下载接口2.4测试文件上传2.5文件下载3、参考文档1、背景在前一节中,我们搭建了一个单机版......