• 军训分批(codevs 2751)


    题目描述 Description

    某学校即将开展军训。共有N个班级。

    前M个优秀班级为了保持学习优势,必须和3位任课老师带的班级同一批。

    问共有几批?

    输入描述 Input Description

    N,M

    老师教的其他班级(M行)

    输出描述 Output Description

    批次数

    样例输入 Sample Input

    4 2

    1 1 1

    2 3 1

    样例输出 Sample Output

    2

    数据范围及提示 Data Size & Hint

    对于50%数据,N,M<=1000.

    对于100%数据,N,M<=30000,N<=M.

    /*
      迷之题意
      先说下题目意思吧:
        给定n个班级,m个优秀班级,对于每个优秀班级,给出3名老师,数值代表每个老师还教着哪个班。教同一个班的三名老师必须同一批次,问需要多少批次。
    
      因为教同一个班的三名老师必须同一批次,所以对于每一个优秀班级,都最多有可能有另外3个班和它同一批次,我们就用并查集将它们合并,以求出答案。 
    */
    #include<cstdio>
    #include<iostream>
    #define M 30010
    using namespace std;
    int fa[M];
    int find(int x)
    {
        if(fa[x]==x)return x;
        return fa[x]=find(fa[x]);
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)fa[i]=i;
        for(int i=1;i<=m;i++)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            int r=find(i),a=find(x),b=find(y),c=find(z);
            if(r!=a)fa[a]=r;
            if(r!=b)fa[b]=r;
            if(r!=c)fa[c]=r;
        }
        int ans=0;
        for(int i=1;i<=n;i++)
          if(fa[i]==i)ans++;
        printf("%d",ans);
        return 0;
    } 
    View Code
  • 相关阅读:
    lambda表达式
    You can't specify target table 't_mail_marketing' for update in FROM clause
    从对象list中获取对象属性list
    枚举缓存
    Solr语法
    通过Telnet查询注册服务
    日志查询
    Maven 屏蔽静态文件
    抽奖
    随机码生成方法
  • 原文地址:https://www.cnblogs.com/harden/p/5707755.html
Copyright © 2020-2023  润新知