首页 > 其他分享 >小T的疑惑

小T的疑惑

时间:2023-05-30 16:35:16浏览次数:31  
标签:疑惑 pre xue int wo shi root


7-3 小T的疑惑 (20分)

小T是一个非常无聊的人,没事就喜欢偷听别人聊天。某天他在食堂排队时听到大一的新同学们在聊天,于是他也凑了过去。听到如下谈话:

小L : 我和小Z是同学。

小Z : 我和小H是同学。

小H : 我和小R是同学。

小B : 我和小A是同学。

小Z : 我和小Z是同学。

小T想知道,聊天的这些同学最多来自于几个不同的班级,你能帮帮他吗。
输入格式:

第一行两个整数n(1≤n≤100000),m(1≤m≤50000)。分别表示聊天中学生的数量和语句的数量。

接下来m行,每行给出一个语句,以以下形式给出:

xxx : wo he yyy shi tong xue

其中,xxx和yyy是长度不超过10的字符串,表示人名,并且xxx和yyy可能相同。

输出格式:

输出一个整数表示这些学生最多来自于多少个不同的班级。
样例1

输入样例

6 5
L : wo he Z shi tong xue
Z : wo he H shi tong xue
H : wo he R shi tong xue
B : wo he A shi tong xue
Z : wo he Z shi tong xue

输出样例

2

样例2

输入样例

6 1
L : wo he L shi tong xue

输出样例

6
//
// Created by TIGA_HUANG on 2020/10/8.
//

#include <iostream>
#include <map>

using namespace std;

int N, M;
map<string, int> mp;
//string pm[100005];
bool vis[100005];

int pre[100005];
bool dif[100005];

int find(int root) {
    int x = root;
    while (pre[root] != root) {
        root = pre[root];
    }
    while (root != pre[x]) {
        int t = pre[x];
        pre[x] = root;
        x = t;
    }
    return root;
}

void Union(int x, int y) {
    int fx = find(x);
    int fy = find(y);
    if (fx != fy) {
        pre[fx] = fy;
    }
}

int main() {
    for (int i = 0; i < 100005; ++i) {
        pre[i] = i;
    }
    cin >> N >> M;
    string a, b, t;
    int k = 1;
    for (int i = 0; i < M; ++i) {
        cin >> a >> t >> t >> t >> b >> t >> t >> t;
        if (!vis[mp[a]]) {
            mp[a] = k;
            vis[k++] = true;
        }
        if (!vis[mp[b]]) {
            mp[b] = k;
            vis[k++] = true;
        }
        Union(mp[a], mp[b]);
    }
    for (int i = 1; i <= k; ++i) {
        dif[find(i)] = true;
    }
    int cnt = 0;
    for (int i = 1; i <= k; ++i) {
        if (dif[i])
            cnt++;
    }
    if (k == N) {
        cout << cnt << endl;
    } else {
        cout << N - k + cnt << endl;
    }
    return 0;
}


标签:疑惑,pre,xue,int,wo,shi,root
From: https://blog.51cto.com/u_16144724/6380360

相关文章

  • 《JavaScript权威指南第七版》13.3.4实现细节,关于“ES2017解释器可以把函数体分割成一
    读到“ES2017解释器可以把函数体分割成一系列独立的子函数,每个子函数都被传给位于他前面以await标记的那个期约的then方法”这一部分是比较困惑,也没有代码示例,很抽象,不易理解。自己写了个例子来复述一下这段话:functiongetPosts(){returnnewPromise(function(resolve,......
  • java链表的疑惑
    head.next=tail; tail=newListNode();为什么head.next不等于tail在cpp里面head->next=tail;tail=newListNode();这时head->next==tail.这是因为head->next存放的是tail的地址,而java中head.next=tail; tail=newListNode();head.next存放的是tail的之前......
  • 对于Object中一些方法的疑惑与理解
    getClass这是生成字节码文件对象的三种方式之一,由任意对象调用getClass(Object中定义的方法)可以返回该类的字节码文件对象,一般一般用于反射getName该方法是,Class类中定义的一个方法,用于返回字节码文件对象所表示的实体(类或者接口)的全类名2023.5.4对于向上转型和任何类型都可以......
  • jQuery的$(document).ready(function(){ })的疑惑的解答
    最早接触的时候也说$(document).ready(function(){})这个函数是用来取代页面中的window.onload;但是今天发现好像不是这样回事!是在做一个页面载入效果时发现的!functionwinready(){document.getElementById("loading").style.display="none";}window.onload=winready;以......
  • 谷歌SEO现在还好做么?揭秘站长们的疑惑!
    谷歌SEO现在还好做么?这是许多站长们的疑惑。作为一个有着多年运营经验的站长,我认为虽然谷歌SEO的竞争越来越激烈,但只要站长们掌握正确的方法和策略,依然能在谷歌搜索引擎中取得优异的排名。下面,我将结合自己的经验,为大家解析谷歌SEO的关键要点。了解谷歌SEO的核心因素什么叫GPC爬虫......
  • Addressable卸载AssetBundle失效的疑惑
    1)Addressable卸载AssetBundle失效的疑惑​2)模型Meta中的hasExtraRoot参数的作用及其历史原因3)TMP为什么有多次Delegate.Combine()的GC4)准备在海外发行游戏,比较常用的身份认证类SDK这是第331篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,......
  • 记录-开发WPF项目中的一个疑惑
    背景项目技术栈:C#,WPF当前我想要实现点击某个按钮就可以跳转到某个界面,翻阅了项目中的代码,看到了//按钮事件privatevoidBtn_Click(objectsender,RoutedEventArgse)......
  • 使用memset对数组进行赋值时可能会有的疑惑
    Memset(typename,intvalue,size) *第一个参数为变量的标识符,第二个要赋为数组的值,第三个为数组的大小(单位为字节,可用sizeof()表示)原理:memset是字节为单位进行复制......
  • 切线空间下的法线贴图的一点疑惑
    切线空间,就是以法线为z轴,切线为x轴,附切线为y轴。而切线空间的法线贴图存放的是法线向量,那法线不永远都是z轴么?根本就不需要存放向量值。解惑:切线空间z轴的那个法线指的是......
  • 刷题疑惑2
    1、整数除法:先转化为unsignedint;通过逆向乘法,使除数左移至不大于被除数的最左位,再相减;此时的商就是1左移对应的位数,继续循环判断左移,商用或逻辑相加,最终判断此值是否......