zoukankan      html  css  js  c++  java
  • Codeforces277A 【dfs联通块】

    题意:
    给出n个人会的语言类型,然后问这n个人里面还需要几个人学习一下语言就可以n个直接互通了。a会1,2,b会2,3,c会4,那么只要C学一下1或者2,或者3就好了。。。大致就是这个意思。
    思路:
    一开始还想…强连通缩点什么的。。然后并不是强连通,只是一个联通块。。。
    直接暴搜一个个联通块,答案就是num-1,然后特判每个人都没学一门语言的话。
    贴一发挫code…

    #include <bits/stdc++.h>
    #include<algorithm>
    using namespace std;
    int n,m;
    const int N=1e2+10;
    
    int ma[N][N];
    bool vis[N];
    
    
    void dfs(int x)
    {
        for(int i=1;i<=m;i++)
        {
            if(ma[i][x])
            {
                for(int j=1;j<=n;j++)
                {
                    if(!vis[j]&&ma[i][j])
                    {
                        vis[j]=1;
                        dfs(j);
                    }
                }
            }
        }
    }
    
    int main()
    {
        int x,y;
        bool flag=false;
        scanf("%d%d",&n,&m);
    
        memset(ma,0,sizeof(ma));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            if(x)
                flag=true;
            for(int j=1;j<=x;j++)
            {
                scanf("%d",&y);
                ma[y][i]=1;
            }
        }
        if(!flag)
        {
            printf("%d
    ",n);
            return 0;
        }
    
        int ans=0;
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)
        {
            if(!vis[i])
            {
                vis[i]=1;
                dfs(i);
                ans++;
            }
        }
        printf("%d
    ",ans-1);
        return 0;
    }
    
  • 相关阅读:
    1203 有穷自动机
    1111 评论
    C语言文法 改
    用户调研
    阅读《构建之法》 第8 第9 第10章
    sprint冲刺(第二天)
    sprint初步计划(第一天)
    作业6 团队项目之需求
    作业5 四则运算 测试与封装 5.1 5.2
    作业5 四则运算 测试与封装 5.1
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934872.html
Copyright © 2011-2022 走看看