P2898 [USACO08JAN] Haybale Guessing G 题解
前置知识
解法
对条件的合法性判断其他题解已经讲得很明白了,这里不再赘述。这里主要讲一下用并查集实现黑白染色问题。
以下内容称被覆盖为黑色,不被覆盖为白色。
本题因为是单向染色,即从白到黑,故可类似 luogu P1840 Color the Axis 和 D 的并查集或线段树做法;如果是双向染色,则需要 CF915E Physical Education Lessons 的珂朵莉树或线段树做法。
luogu P1840 Color the Axis 在染色的过程中,我们只关注白色的数量。题意可以转换为给定 \(n\) 棵树组成的森林,每次操作将 \([l_i,r_i]\) 的树删除,求每个操作执行后剩余的树的个数。删除第 \(i\) 棵树等效替代于将第 \(i\) 棵树和第 \(i-1\) 或第 \(i+1\) 棵树合并为一棵树。为方便理解,我们将第 \(i\) 棵树和第 \(i+1\) 棵树合并为以 \(i+1\) 为父亲节点,以 \(i\) 为子节点的一棵(子)树。本题要求求该位置是否为黑色,但同样可以用类似的方法进行合并。
例子:设 \(n=5,m=1\) 时操作为将 \([2,4]\) 的树删除。过程如下




经路径压缩后如下




这里可以感性理解下。作者语文功底不是很好,可能解释不是很清楚。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define sort stable_sort
#define endl '\n'
struct node
{
int l,r,x;
}a[1000002],b[1000002];
int f[1000002];
bool cmp(node a,node b)
{
if(a.x==b.x)
{
if(a.l==b.l)
{
return a.r<b.r;
}
else
{
return a.l<b.l;
}
}
else
{
return a.x>b.x;
}
}
int find(int x)
{
return (f[x]==x)?x:f[x]=find(f[x]);
}
bool check(int mid,int n)
{
int i,j,maxl,maxr,minl,minr,ls;
for(i=1;i<=n+1;i++)//第n棵树要和第n+1棵树合并
{
f[i]=i;
}
for(i=1;i<=mid;i++)
{
b[i].l=a[i].l;
b[i].r=a[i].r;
b[i].x=a[i].x;
}
sort(b+1,b+1+mid,cmp);
ls=b[1].x;
maxl=minl=b[1].l;
maxr=minr=b[1].r;
for(i=2;i<=mid;i++)
{
if(ls==b[i].x)
{
maxl=max(maxl,b[i].l);
minl=min(minl,b[i].l);
maxr=max(maxr,b[i].r);
minr=min(minr,b[i].r);
if(maxl>minr)
{
return false;
}
}
else
{
if(find(maxl)>minr)
{
return false;
}
else
{
for(j=find(minl);j<=maxr;j=find(j+1))//将第j棵树和第j+1棵树合并为同一棵树
{
f[j]=f[j+1];
}
ls=b[i].x;
maxl=minl=b[i].l;
maxr=minr=b[i].r;
}
}
}
return find(maxl)<=minr;
}
int main()
{
int n,m,i,l=0,r,mid;
cin>>n>>m;
r=m;
for(i=1;i<=m;i++)
{
cin>>a[i].l>>a[i].r>>a[i].x;
}
while(l<=r)
{
mid=(l+r)/2;
if(check(mid,n)==true)
{
l=mid+1;
}
else
{
r=mid-1;
}
}
cout<<((r==m)?0:l)<<endl;//注意当没有矛盾时输出0
return 0;
}
P2898 [USACO08JAN] Haybale Guessing G 题解的更多相关文章
- 题解—P2898 [USACO08JAN]Haybale Guessing G
pre 首先注意一下翻译里面并没有提到的一点,也是让我没看懂样例的一点,就是这个长度为 \(n\) 的数组里面的数各不相同. 有很多人用并查集写的这道题,题解里面也有一些用线段树写的,不过我认为我的做 ...
- 洛谷 P2898 [USACO08JAN]haybale猜测Haybale Guessing 解题报告
[USACO08JAN]haybale猜测Haybale Guessing 题目描述 给一段长度为\(n\),每个位置上的数都不同的序列\(a[1\dots n]\)和\(q\)和问答,每个问答是\( ...
- [USACO08JAN]Haybale Guessing(LuoguP2898)
The cows, who always have an inferiority complex about their intelligence, have a new guessing game ...
- POJ 3657 Haybale Guessing(区间染色 并查集)
Haybale Guessing Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2384 Accepted: 645 D ...
- Haybale Guessing
Haybale Guessing Time Limit: 1000MS Memory Limit: 65536K Description The cows, who always ha ...
- 洛谷P3104 Counting Friends G 题解
题目 [USACO14MAR]Counting Friends G 题解 这道题我们可以将 \((n+1)\) 个边依次去掉,然后分别判断去掉后是否能满足.注意到一点, \(n\) 个奶牛的朋友之和必 ...
- 洛谷P2115 Sabotage G 题解
题目 [USACO14MAR]Sabotage G 题解 本蒟蒻又来了,这道题可以用二分答案来解决.我们可以设答案最小平均产奶量为 \(x \ (x \in[1,10000])\) .然后二分搜索 \ ...
- [USACO08JAN]haybale猜测Haybale Guessing
题目描述 The cows, who always have an inferiority complex about their intelligence, have a new guessing ...
- 【[USACO08JAN]haybale猜测Haybale Guessing】
抄题解.jpg 完全完全不会啊,这道题简直太神了 不过抄题解可真开心 首先这道题目保证了每一个位置上的数都是不同的,那么就能得到第一种判断不合法的方式 如果两个区间的最小值一样,但是两个区间的交集为空 ...
- [USACO 08JAN]Haybale Guessing
Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...
随机推荐
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.21)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- QT5.9移植到海思HI3520设备上运行
前言: 在海思HI3520DV300上调试QT5.9.0有一小段时间了,这里将遇到的比较典型的问题做一个记录,以备后续查询,也可给同行一个参考.本人只使用过QT5.9.0这一个版本,如有描述错误欢迎指 ...
- [转帖]查询机器序列号--Linux/esxi/windows
https://www.jianshu.com/p/6abaea79e0c3 Ipmitool--Linux&Esxi&Windows # ipmitool fru list|grep ...
- [转帖]yum 下载全量依赖 rpm 包及离线安装(终极解决方案)
简介 通常生产环境由于安全原因都无法访问互联网.此时就需要进行离线安装,主要有两种方式:源码编译.rpm包安装.源码编译耗费时间长且缺乏编译环境,所以一般都选择使用离线 rpm 包安装. 验证环境 C ...
- [转帖]Linux 中unzip解压时中文乱码的解决办法
https://www.yii666.com/blog/163883.html Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如"资料.z ...
- 【图论,网络流】CF1525F Goblins And Gnomes
Problem Link 你在打怪.你有一个 \(n\) 个点 \(m\) 条边的 DAG,接下来会有 \(k\) 波怪来袭,第 \(i\) 波怪有 \(i\) 个,它们会各自选择走一条路径,要求它们 ...
- vue中render函数使用attrs绑定id、class、style、事件(5)
1.h函数的三个参数 第一个参数是必须的. 类型:{String | Object | Function} 一个 HTML 标签名.一个组件.一个异步组件.或一个函数式组件. 是要渲染的html标签. ...
- vue/cli3.0相对路径打包
在项目下新增vue.config.js文件 module.exports={ productionSourceMap: false, publicPath: process.env.NODE_ENV ...
- fasthttp 中如何使用`Transfer-Encoding: chunked` 方式的流式内容输出
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 具体的思路是这样:通过 RequestCtx 的 Conn ...
- js设计模式(下)
引用:(23条消息) <Javascript设计模式与开发实践>关于设计模式典型代码的整理(下):模板方法模式.享元模式.职责链模式.中介者模式.装饰模式.状态模式.适配器模式_QQsil ...