zoukankan      html  css  js  c++  java
  • 军训分批(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
  • 相关阅读:
    0428备份
    1
    0416工作备份
    Bootstrap dropdown a标签或者button 点击事件
    禁止Html5在手机上屏幕页面缩放
    查看端口占用情况
    cakephp 中的find的用法
    cakephp 中连接查询多表 或group by
    cakephp 中的in的用法
    php批量下载文件
  • 原文地址:https://www.cnblogs.com/harden/p/5707755.html
Copyright © 2011-2022 走看看