当前位置: 首页 > news >正文

P8403 [CCC2022 J4] Good Groups

题目背景

请注意:这道题是 CCO 2022 S2 Good Groups 的弱化版

管理备注:似乎没有弱化

题目描述

一个班级会被分成 g 个组,每个组有三个人,这种分组方式可能会违反两种规定:

  1. 一些学生必须在同一小组;
  2. 一些学生必须不在同一小组。

现在校长找到了你,问学生一共违反了多少个规定。

输入格式

第一行一个整数 x。紧接着 x 行,每行两个学生名字 name1​,name2​ ,表示这两个学生必须被分配到同一个小组。

接下来一个整数 y。紧接着 y 行,每行两个学生名字 name1​,name2​ ,表示这两个学生必须不在同一个小组。

接下来一个整数 g。紧接着 g 行,每行三个学生名字name1​,name2​,name3​,表示这三个学生现在被分在一个小组。

输出格式

输出一个整数,表示学生一共违反了多少个规定。

输入输出样例

输入 #1

1
ELODIE CHI
0
2
DWAYNE BEN ANJALI
CHI FRANCOIS ELODIE

输出 #1

0

输入 #2

3
A B
G L
J K
2
D F
D G
4
A C G
B D F
E H I
J K L

输出 #2

3

说明/提示

样例2解释:

  1. A 和 B 必须在同一组,这一点违反了。
  2. G 和 L 必须在同一组,这一点违反了。
  3. J 和 K 必须在同一组,这一点没有违反。
  4. D 和 F 必须不在同一组,这一点违反了。
  5. D 和 G 必须不在同一组,这一点没有被违反。

以上 5 条共违反 3 条,所以输出 3。

对于 25% 的数据:1≤g≤50,1≤x≤50,y=0

对于另外 60% 的数据:1≤g≤50,1≤x≤50,1≤y≤50

对于 100% 的数据:1≤g≤10^5,1≤x≤10^5,1≤y≤10^5

代码

#include<iostream>
#include<map>
using namespace std;
struct must_in{//定义必须在一组的人的名字string name1,name2;
}m_i[100005];
struct must_not_in{定义必须不在一组的人的名字string name1,name2;
}m_n_i[100005];
struct now{//定义已经分好的组string name1,name2,name3;
}no[100005];
map<string,string>mp;//使用map映射函数
int main()
{int x,y,g;cin>>x;for(int i=1;i<=x;i++){cin>>m_i[i].name1>>m_i[i].name2;}cin>>y;for(int i=1;i<=y;i++){cin>>m_n_i[i].name1>>m_n_i[i].name2;}cin>>g;for(int i=1;i<=g;i++){cin>>no[i].name1>>no[i].name2>>no[i].name3;mp[no[i].name1]=no[i].name1;//对于每个分组,让第一个名字的父节点指向自己mp[no[i].name2]=no[i].name1;//对于每个分组,让第二个名字的父节点指向第一个名字mp[no[i].name3]=no[i].name1;//对于每个分组,让第三个名字的父节点指向第一个名字}int cnt=0;//统计违反规定的组的数量string xx,yy;for(int i=1;i<=x;i++){xx=mp[m_i[i].name1];//寻找第一个名字的父节点yy=mp[m_i[i].name2];//寻找第二个名字的父节点if(xx!=yy) cnt++;//判断是否违反规定}for(int i=1;i<=y;i++){xx=mp[m_n_i[i].name1];//寻找第一个名字的父节点yy=mp[m_n_i[i].name2];//寻找第二个名字的父节点if(xx==yy) cnt++;//判断是否违反规定}cout<<cnt;return 0;
} 


http://www.mrgr.cn/news/44508.html

相关文章:

  • stable diffusion【win+Mac版】超详细安装教程(附stable diffusion 整合包)
  • 就业市场需求分析:基于前程无忧岗位数据分析
  • 在ubuntu好部署jenkins发布vue项目时遇到的一些问题及解决方法以及使用jenkins发布vue项目-npm自动打包发布的实现
  • 代码随想录算法训练营第二十六天|669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • 【Linux探索学习】第三弹——Linux的基础指令(下)——开启新篇章的大门
  • 【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解
  • c语言中,数组指针、指针数组、函数指针、指针函数
  • 富格林:领悟可信经验避免暗箱
  • 【C++】二叉搜索树+变身 = 红黑树
  • Final Glory推出“荣耀勋章-神龙”,游戏市场反响激烈
  • [含文档+PPT+源码等]精品大数据项目-基于python爬虫实现的大数据岗位的挖掘与分析
  • 电感七大关键参数
  • 工业缺陷检测深度学习方法
  • #Swift 递归枚举 VS Struct 实现自引用 数据结构 (链表 二叉树)
  • 蒙特卡罗方法 -引言篇
  • C++学习笔记----8、掌握类与对象(五)---- 嵌套类与类中枚举
  • 推荐系统中的协同过滤
  • 【MySQL】--数据类型
  • Spring Boot框架在医院管理中的应用
  • Docker 实践与应用举例