zoukankan      html  css  js  c++  java
  • tyvj1017 冗余关系

    描述

    Mrs.Chen是一个很认真很称职的语文老师 ......
    所以,当她看到学生作文里的人物关系描述得非常的麻烦的时候,她非常生气,于是宣布:凡是作文里有冗余关系的,一率罚抄出师表10次...同学们非常的恐惧,于是,每当他们写出一篇作文,都要拿来你这个语文兼OI天才这里,问你有没有冗余的关系 ...... 时间一久,你也烦了,于是就想写个程序来代劳 ...
    现在这里有一篇作文,有n句描述人物关系的句子,描述了n个人的关系
    每条句子的定义是这样的,X Y,它的意思是:X认识Y Y也认识X。现在要你求出文中冗余关系的数目.
    注意: 假如A认识B,B认识C,则A也认识C
    冗余关系的定义是指 : 即使没有这条关系,原图的所有关系照样成立.

    输入格式

    第一行,两个整数,表示句子数量(n),表示人数(m)。
    接下来n行,每行两个数,意义在描述里已经说了. 

    输出格式

    一个整数,表示冗余关系的数目.

    测试样例1

    输入

    3 3 
    1 2 
    1 3 
    2 3

    输出

    1

    备注

    1<=n,m<=1000
     
    一个sb并查集题
    两种思考方向,一种是每次如果要加边的两个已经在同一个并查集,就ans++;另一种是 m - 实际需要总边数(= n - 联通块数)。两种实际上是一样的,我用的第二种。
    //Serene
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    #include<set>
    using namespace std;
    const int maxn=1000+10;
    int n,m,fa[maxn],ltk;
    
    int aa;char cc;
    int read() {
    	aa=0;cc=getchar();
    	while(cc<'0'||cc>'9') cc=getchar();
    	while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
    	return aa;
    }
    
    int find(int x) {
    	return x==fa[x]? x:fa[x]=find(fa[x]);
    }
    
    int main() {
    	ltk=n=read();m=read();int x,y,xx,yy;
    	for(int i=1;i<=n;++i) fa[i]=i;
    	for(int i=1;i<=m;++i) {
    		x=read();y=read();
    		xx=find(x);yy=find(y);
    		if(xx!=yy) {
    			ltk--;
    			fa[xx]=yy;
    		}
    	}
    	printf("%d",m-(n-ltk));
    	return 0;
    }
    

      

    弱者就是会被欺负呀
  • 相关阅读:
    57-java 开发环境配置,mysql解压版安装
    56-MyBatis关联映射之一对多映射
    55-mybatis dao 和 映射xml
    54-jquery发送请求 json 转化等
    58-wxPython 嵌入html页面
    57-2015-第六届蓝桥杯国赛 java B组真题与解析
    【读书笔记】Effective Modern Cpp(二)
    【读书笔记】Effective Modern Cpp(一)
    【剑指offer】汇总
    【剑指offer】序列化二叉树
  • 原文地址:https://www.cnblogs.com/Serene-shixinyi/p/7513535.html
Copyright © 2011-2022 走看看