Week 4 题目总结(并查集、搜索)

Part 1 并查集

1.True Liars

题意:第一行包括三个整数 n p q 表示话语的数量 诚实人和撒谎人的数量,接下来n行 形式如 x1 y1 yes/no,表示x1 说y1 是 诚实人/撒谎人。

思路:0代表同类,1代表异类,用异或操作更新权值,每个并查集连通块分为两类人,用二位数  组w[mp[f]][d[i]] 表示以f为根节点的连通块中状态为d[i] (0/1) 的人数,最后用0/1背包求解(dp[i][j] 表示从前i个集合中选出j个诚实人的情况数)并回溯路径,遍历所有点,当其状态等于其根节点 且 根节点被选中时输出该节点,即为城市人。

2.Parity game

题意:小明爸爸写下一串长度为N的0101序列,小明可以对其进行M次询问,每次询问 [l, r] 区间(闭区间) 内有奇数个1还是偶数个1,最后给出该序列。判断是否矛盾

思路:离散化,用异或更新权值(0为偶数个,1为奇数个),每次x--以保证区间相连

3.Navigation Nightmare

题意:有n个网格状的农田,每个农田之间有距离,会依次给出关系,在给出关系后询问两个农田之间的曼哈顿距离是多少?

思路:开垂直和水平两个方向上的权值数组,用结构体保存两点之间的距离和方向。

4.Rochambeau

题意:n个小伙伴进行猜拳有戏,除了一个比较聪明的家伙以外,其他人只会出单一的一种,给出m中猜拳的结果,要求找出那个比较聪明的小伙伴序号,并且输出在第几次猜拳可以确定。

思路:枚举+带权并查集,依次假设每个小朋友不是大聪明,遇到这个小朋友的对局就跳过,出现矛盾则排除这个小朋友,最晚出现矛盾的时候就是确定大聪明的时候(想一想为什么????)

5.Connections in Galaxy War

题意:假设有编号从0开始的n个女粉丝,仙人给每个女粉丝都打上一个非负的“颜值”分数s_i 。现在仙人给定x条边将某些仙女用仙绳两两连在一起,并指定y个操作。

每个操作只有两种类型,分别是:
destroy c d 表示扯断c, d仙女之间的仙绳
query c 表示从c仙女出发能通过仙绳到达的仙女中,“颜值”分数比c仙女大的,且在分数最大前提下编号最小的仙女。

思路:带权并查集,权值w[i]表示从i能到达的编号、颜值最大的女粉丝编号,用map记录每条边的出现顺序,用结构体c[i]表示第i个时间,c[i].bl==1表示询问,c[i].bl==0表示删边,并让这两边的bl变量记为1。遍历每条边并合并,若bl==1则跳过(表示要增加的边)。最后倒序遍历事件。

6.小希的迷宫 / Is It A Tree?

题意:判断一个图是否为树(有无环)

思路:find(a)==find(b)则为有环

Part 2 搜索

7.棋盘问题

题意:要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,求可行方案。

思路:dfs,st[]数组表示每一列是否被访问过,dfs(x,t)表示第x行,选了t个数。

8.Fliptile

 题意:给定一张0/1图,十字形翻转,求将所有1翻转为0的最小次数。

 思路:状态压缩,遍历第一行的所有翻转情况(0~1<<n),若op>>i&1==1则翻转。

9.Prime Path

 题意:求将一个四位素数转变为另一个四位素数的最小改变次数。

 思路:素数表+bfs,取出每个数的各个位的数存放在数组里,遍历每个数位,遍历时先将这个数   位变成0,再从[0,10)遍历,若千分位为0或各位为偶数则跳过。

10.Pots 

 题意:给出两个容器,分别能装A、B升水,给出6种操作,求任意一杯恰有C升水的最小操作次   数。

 思路:bfs,用string数组记录每种操作,用结构体记录每种状态的水量、操作数、path[]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值