• [1451] Elise

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • Elise is the Spider Queen. She has a skill, Spider Form(蜘蛛形态).

    When she transformed to the spider, there will be some small spiders around her.

    But she has a problem - the small spiders will have infighting because of less common interest. So Elise decided to train their interesting.

    At least, they must have common interest no matter directly or indirectly.

    How to train theirs interest in least cost? We assume that train a interest for a spider cost 1 strength and there are at most 100 interests in total.

  • 输入
  • This problem contains several cases.
    The first line of each case is an integer N (1 ≤ N ≤ 100), indicates the number of spiders.
    Then N lines followed.
    The ith line contains an integer Ti (0 ≤ Ti ≤ 100) that indicates the number of this spider's interest and Ti strings indicate the interests. You can assume there are only lowercase letters in the strings and no longer than 20.
  • 输出
  • For each case, you should output the least cost.
  • 样例输入
  • 5
    1 kill
    1 kill
    2 sleep sing
    2 sing fart
    1 fart
  • 样例输出
  • 1
  • 提示
  • In this case, the spider 1 or 2 just need to learn to sleep or sing or fart. So it's 1.
    
  • 来源
  • XadillaX

题意: 蜘蛛女皇-伊莉丝有很多个小蜘蛛,如果小蜘蛛没有共同的兴趣爱好的话就会内讧,为了让小蜘蛛们不内哄,伊莉丝能够花费1点体力让一个小蜘蛛培养一个兴趣。求最少花费的体力是多少?

分析:因为涉及到集合,所以就想到了并查集,给每一个兴趣编号,每个小蜘蛛也有一个编号,暴力枚举每一个小蜘蛛的兴趣爱好,如果有其他的蜘蛛和这个蜘蛛有共同的兴趣爱好,那么就把这两个蜘蛛合并到一个集合里面去,那么最后的答案就是,所有集合个数-1

这已经算是最暴力的解法了O(n^4),但是如果用set在查找相同兴趣的地方优化一下,能够将复杂度降到O(n^3)

可能是数据水了,就让我水过去了

有个要注意的地方就是兴趣可能为0

#pragma comprint(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<string>
#include<iostream>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#include<stdlib.h>
#include<time.h>
#include<algorithm>
#define LL __int64
#define FIN freopen("in.txt","r",stdin)
const int MAXN=100+5;
using namespace std;
map<string,int> mat;
vector<int> G[MAXN];
char str[20+5];
int p[MAXN];
int findfa(int x)
{return p[x]==x?x:p[x]=findfa(p[x]);
}
int main()
{int n,m;while(scanf("%d",&n)!=EOF){mat.clear();int tot=1,cnt=0;                          //cnt记录兴趣为0的个数for(int i=1;i<=n;i++){scanf("%d",&m);if(m==0) cnt++;G[i].clear();                         //清空vectorp[i]=i;                               //初始化并查集for(int j=1;j<=m;j++){scanf("%s",str);if(!mat[str]) mat[str]=tot++;     //给兴趣编号
                G[i].push_back(mat[str]);}}if(cnt==n) {printf("%d\n",cnt);continue;} //如果全为0,则每个小蜘蛛都要学习for(int i=1;i<=n;i++){if(G[i].size()==0) continue;for(int j=0;j<G[i].size();j++){for(int k=1;k<=n;k++){if(i==k) continue;if(G[k].size()==0) continue;for(int l=0;l<G[k].size();l++){if(G[i][j]==G[k][l]){int x=findfa(i);int y=findfa(k);if(x!=y){p[x]=y;}}}}}}int ans=0;for(int i=1;i<=n;i++){if(p[i]==i) ans++;}printf("%d\n",ans-1);}return 0;
}

View Code

转载于:https://www.cnblogs.com/clliff/p/4749286.html

NBUT 1451 Elise (暴力+并查集)相关推荐

  1. bzoj4569 [Scoi2016]萌萌哒 并查集+st表

    这个题非常巧妙,它描述了一种新的延迟标记关系.. 正常的线段树是用n*4的空间描述一个序列,所以对于一段区间,有可能会有log个点对应一个点 而线段树是利用尽量小的空间使查询变为log st表是nlo ...

  2. bzoj 3563 ╮(╯▽╰)╭+ 并查集

    题意:N个点,M条无向边,Q个操作,每个操作中破坏K条边,其中编号和K已经加密,即原数异或之前未联通的个数(给的是原k,但后面有异或后的k的个数个编号),判断每个操作后是否联通 会做题不等于会出题系列 ...

  3. 51nod1307(暴力树剖/二分dfs/并查集)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1307 题意: 中文题诶~ 思路: 解法1:暴力树剖 用一个数 ...

  4. jzoj3301-[集训队互测2013]家族【并查集,暴力】

    正题 题目大意 一个图每个边有不同的频率,对于大小为xxx的联通可以共享价值wxw_xwx​.现在要去保留一段频率内的边,使得剩下的联通分量价值之和至少为KKK. 求最小的保留频率宽度. 解题思路 首 ...

  5. [郑州培训2012] 暴力摩托-并查集

    如有错误,请留言提醒,不要坑到小朋友 Description 华英雄最喜欢玩暴力摩托,一个通宵之后,总算过了全关!正当他为自己的成绩洋洋得意的时候却发现居然还有一个特别的附加关!华英雄虽然累得眼睛都睁 ...

  6. 问题 1433: [蓝桥杯][历届试题]危险系数(并查集and暴力)

    问题 1433: [蓝桥杯][历届试题]危险系数 时间限制: 1Sec 内存限制: 128MB 提交: 123 解决: 39 题目描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的 ...

  7. *【PAT天梯】分而治之(并查集,暴力)

    题干: L2-1 分而治之 (25 分) 分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案 ...

  8. BZOJ 4668: 冷战 并查集暴力LCA(雾)

    利用并查集按秩合并,保存每个点合并的时间: 求时间时,就一直跳u=fa[u],并记录路径上时间的最大值,代表最后一次合并的时间 #include<cstdio> #include<i ...

  9. 并查集 ---- 扩展域并查集判二分图 + 循环模拟字典树 The 2020 ICPC Asia Macau Regional Contest C. Club Assignment (详解)

    题目链接 题目大意: 有n个数,现在要把他们拆分成两个集合,假设S为集合,有如下定义: f(S)={min(x⊕y)∣x,y∈S,andx!=y}f(S)=\{min(x\oplus y)|x,y\i ...

  10. BZOJ 2143 飞飞侠(线段树优化建边 / 并查集优化最短路)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2143 是 hydro 的 BZOJ ...

最新文章

  1. python字典、列表、元祖使用场景_python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍...
  2. tx2 numba opencv
  3. python pip安装模块失败的原因
  4. android 补间动画重复次数,9.1.5 setRepeatCount方法:设置重复次数
  5. 教你如何在 Linux 上为 SSH 登录设置电子邮件提醒
  6. 【分析】在线交易开启跨境电商B2B新纪元
  7. PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习简介
  8. django-模型类操作-初期阶段-小结
  9. git add用法详解,参数列表,git add -A/git add -u/git add .区别
  10. Linux下QT创建项目错误处理
  11. 2019年重大信息安全事件解读,网络信息安全值得重视(上)
  12. c语言pic延时1ms程序,几个延时子程序
  13. 移动硬盘无法读取怎么办?
  14. STM32 ETR使用
  15. Making Youden Plots in R
  16. moodle课程搭建过程中的注意事项(避坑)
  17. java二维码生成器及下载
  18. 机器学习-周志华-课后习题-绪论
  19. 基于html+css的四张图片并排
  20. 淘宝层级改版,五力模型上线!

热门文章

  1. DM368开发 -- 再论 UBL
  2. 3.1 WTL概述,简单使用和ATL概述,简单使用
  3. WTL 自绘控件库 (CQsAnimaStatic)
  4. Is the docker daemon running问题解决方法
  5. N的阶乘 -- (九度OJ 大整数乘法)
  6. html页面导出word文档
  7. Adobe Illustrator CS5 快捷键大全
  8. nginx配置详细说明
  9. anaconda的所有版本大全--下载地址
  10. Symmetric Matrices