• 【并查集】团伙


    基础并查集

    题目描述

    1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:

    我朋友的朋友是我的朋友;

    我敌人的敌人也是我的朋友。

    两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。

    输入输出格式

    输入格式:

    输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N)。 第二行M(1<=M<=5000),表示关于强盗的信息条数。 以下M行,每行可能是F p q或是E p q(1<=p q<=N),F表示p和q是朋友,E表示p和q是敌人。输入数据保证不会产生信息的矛盾。

    题面非常短,哈……

    题意的确还是挺好理解的。最早我做的时候,用了比较麻烦的图论方法:就是处理这张图,再对每一组连通分量各做处理,最后统计。

    显然这是个累赘方法……

    后来学习了一下HarryHu的方法,嗯……他去年11月就做掉了。对于每一个的敌人,我们记录一下,当下一次遇到他的另一个敌人时候,只需要将敌人合并就可以了,因为敌人间是朋友,并且其他人已经合并为同一个祖先了。

    代码一:https://paste.ubuntu.com/p/jcPgpmsXNJ/

    代码二:https://paste.ubuntu.com/p/fX24Y35yXD/

    但是……

    这就很mmp了对不对

    但是非常感谢学长 CYC @一个懵了的人 找到了我代码中的读入错误。

    由于luogu上本题数据是在windows下生成,文件里的换行符是“ ”,呃然后读入%d时候就出事了。

    另外学到了另外一种新的读取无用字符的写法:

      scanf("%*c%*c"); 

     

     

  • 相关阅读:
    U-Boot新手入门
    安装交叉编译工具
    Makefile 工程管理
    gcc基本用法
    poj 3264 Balanced Lineup
    hdoj 1166 敌兵布阵
    poj 1363 Rails
    poj 1028 Web Navigation
    zoj 3621 Factorial Problem in Base K
    poj1861最小生成树
  • 原文地址:https://www.cnblogs.com/antiquality/p/8457499.html
Copyright © 2020-2023  润新知