• 2597 团伙


    题目描述 Description

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

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

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

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

    输入描述 Input Description

    输入文件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是敌人。输入数据保证不会产生信息的矛盾。

    输出描述 Output Description

    输出文件gangs.out只有一行,表示最大可能的团伙数。

    样例输入 Sample Input

    6
    4
    E 1 4
    F 3 5
    F 4 6
    E 1 2

    样例输出 Sample Output

    3

    数据范围及提示 Data Size & Hint

    2<=N<=1000

    1<=M<=5000

    1<=p q<=N

     
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cmath>
     5 #include<cstring>
     6 using namespace std;
     7 long fa[1001],a[1001][1001],c[1001];
     8 long find(long x)
     9 {
    10     long r;
    11     r=x;
    12     while (fa[r]!=r) r=fa[r];
    13     return r;
    14 }
    15 int main()
    16 {
    17     long n,m,s=0,i,j,k,x,y,r1,r2,t;
    18     char z;
    19     cin>>n>>m;
    20     memset(a,0,sizeof(a));
    21     for (i=1; i<=n; i++) 
    22     fa[i]=i;
    23     for (i=1; i<=m; i++)
    24     {
    25         cin>>z>>x>>y;
    26         if (z=='F') 
    27         {
    28             r1=find(x); 
    29             r2=find(y);  
    30             fa[r2]=r1;     
    31         }
    32         if (z=='E') // x,y为敌对关系 
    33         {
    34             for (j=1; j<=a[x][0]; j++) //a[x][0]为x敌人的数量 
    35             {
    36                r1=find(y); 
    37                r2=find(a[x][j]); 
    38                fa[r2]=r1; 
    39             }
    40             for (j=1; j<=a[y][0]; j++)
    41             {
    42                r1=find(x); 
    43                r2=find(a[y][j]); 
    44                fa[r2]=r1; 
    45             }  
    46             a[x][0]++; 
    47             a[y][0]++;
    48             a[x][a[x][0]]=y;    
    49             a[y][a[y][0]]=x;     
    50         }
    51     }    
    52     s=0; 
    53     for (i=1; i<=n; i++)    
    54     if (fa[i]==i) 
    55     s++;
    56     cout<<s;
    57 }
    58     
  • 相关阅读:
    rk3288的SDK修复cm3218光敏驱动bug
    UVA 12627
    用JDBC编程的执行时错误及其解决大全
    linux中文输入法
    树套树专题——bzoj 3110: [Zjoi2013] K大数查询 &amp; 3236 [Ahoi2013] 作业 题解
    To Noob Json是什么鬼?
    2015.7.3, 杭州……产品级敏捷案例研究
    Java下拼接运行动态SQL语句
    spring mvc+ajax分页
    Linux开发环境搭建与使用——ubuntu更新设置
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6700486.html
Copyright © 2020-2023  润新知