题干:

L2-1 分而治之 (25 分)

分而治之,各个击破是兵家常用的策略之一。在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。为此参谋部提供了若干打击方案。本题就请你编写程序,判断每个方案的可行性。

输入格式:

输入在第一行给出两个正整数 N 和 M(均不超过10 000),分别为敌方城市个数(于是默认城市从 1 到 N 编号)和连接两城市的通路条数。随后 M 行,每行给出一条通路所连接的两个城市的编号,其间以一个空格分隔。在城市信息之后给出参谋部的系列方案,即一个正整数 K (≤ 100)和随后的 K 行方案,每行按以下格式给出:

Np v[1] v[2] ... v[Np]

其中 Np 是该方案中计划攻下的城市数量,后面的系列 v[i] 是计划攻下的城市编号。

输出格式:

对每一套方案,如果可行就输出YES,否则输出NO

输入样例:

10 11
8 7
6 8
4 5
8 4
8 1
1 2
1 4
9 8
9 1
1 10
2 4
5
4 10 3 8 4
6 6 1 7 5 4 9
3 1 8 4
2 2 8
7 9 8 7 6 5 4 2

输出样例:

NO
YES
YES
NO
NO

解题报告:

因为数据范围不大,考虑O(N*K)的做法:

对于每个方案使用并查集,最后看是否每个节点的boss是否是自己就可以了。

考虑优化?

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
typedef long long ll;
using namespace std;
const int MAX = 2e5 + 6;
int f[MAX];
int n,m;
int u[MAX],v[MAX];
bool bk[MAX];
void init(int n) {for(int i = 1; i<=n; i++) f[i] = i;
}
int getf(int v) {return v == f[v] ? v : f[v] = getf(f[v]);
}
void merge(int u,int v) {int t1 = getf(u);int t2 = getf(v);f[t2] = t1;
}
bool ok() {for(int i = 1; i<=n; i++) {if(f[i] != i) return 0 ;}return 1;
}
int main()
{cin>>n>>m;for(int i = 1; i<=m; i++) {scanf("%d%d",&u[i],&v[i]);}int k;cin>>k;for(int i = 1; i<=k; i++) {init(n);for(int i = 1; i<=n; i++) bk[i] = 0;int num;scanf("%d",&num);for(int tmp,j = 1; j<=num; j++) {scanf("%d",&tmp);bk[tmp]=1;}for(int j = 1; j<=m; j++) {if(bk[u[j]]|| bk[v[j]]) continue;merge(u[j],v[j]);}if(ok()) printf("YES\n");else printf("NO\n");}return 0 ;
}

*【PAT天梯】分而治之(并查集,暴力)相关推荐

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

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

  2. PAT 天梯赛真题集

    题目:L2-010 排座位 题意: 1. x与y是敌对关系: a)也有共同好友:OK but... b)无共同朋友:No way 2. x与y是朋友关系:No problem 3. x与y既不是朋友也 ...

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

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

  4. Java实现 LeetCode 765 情侣牵手(并查集 || 暴力)

    765. 情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 ...

  5. PAT 10341114(并查集)

    PAT1034(用了炒鸡多的map-) (:_」∠) #include <iostream> #include <stdio.h> #include<stdlib.h&g ...

  6. UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)

    显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...

  7. HYSBZ - 2959 长跑(动态树+并查集)

    某校开展了同学们喜闻乐见的阳光长跑活动.为了能"为祖国健康工作五十年",同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动.一时间操场上熙熙攘攘,摩肩接踵,盛况 ...

  8. L2-010. 排座位-PAT团体程序设计天梯赛GPLT(并查集)

    布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...

  9. L3-003. 社交集群-PAT团体程序设计天梯赛GPLT(并查集)

    在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友.有部分兴趣相同的人们就形成了"社交集群".现请你编写程序,找出所有的集群. 输入格式: 输入的第一 ...

最新文章

  1. 自动备份脚本 mysql svn
  2. ubuntu安装百度网盘
  3. 5月16日 | 硬核突破,应用革新!阿里云数据库线下活动-北京站开启
  4. 如何根据两个顺序构造⼀个唯⼀的⼆叉树?
  5. android tv字体,best登陆「永久地址0365.tv」android默认字体android使用代码使用新的字体的常用代码...
  6. Node Introduce
  7. python dataframe 合并乱序列表_Python数据处理--删除重复项、数值替换和表合并
  8. 扩展PHP内置的异常处理类
  9. winrar加密分析
  10. 关于min max 函数凹凸性,以及报童模型中期望库存,期望缺货量的性质
  11. Hibernate一对多关联关系
  12. 网页数据提取----网络投票软件开发(续1)
  13. qt中的toUtf8, toLatin1, Local8bit编码问题
  14. LaMDA 是有感觉的吗?
  15. 程序员常用的网站合集
  16. Linux sysrq功能
  17. Android消息处理机制Message,Looper,Handler
  18. Vue学习记录-路由
  19. vue移动端富文本编辑器vue-html5-editor
  20. 【EI会议|检索稳定】2021信息、控制及自动化国际学术会议(ICICA 2021)

热门文章

  1. JS判断数字/字母/中文
  2. 在.net 2.0 中执行分布式事务:隐式事务篇(SQL Server 与 Oracle)
  3. 基于知识图谱的问答系统实践
  4. 【匈牙利算法】【二分图匹配】【转载】趣写算法系列之--匈牙利算法
  5. java 打印 模板_Java输入输出模板
  6. 软件测试qa等级考核制度,QA质量规范
  7. 天正计算机命令大全,天正CAD 中按Ctrl+v在不同图中粘贴出现“未知命令T81_tpasteclip”,直接在CAD中就能操作...
  8. html文档php 取mac地址_cpu序列号_硬盘序列号,用vbs脚本获取网卡MAC,CPUID,硬盘序列号的实现代码...
  9. mysql导出表_mysql导出表的3种方式
  10. 英伟达_如何超越英伟达?