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 ...
随机推荐
- Liunx运维(二)-文件与目录操作
文档目录: 一.pwd:显示当前位置 二.cd:切换目录 三.tree:树形结构显示目录 四.mkdir 创建目录 五.touch:创建空文件或改变文件时间戳 六.ls:显示目录下内容相关属性信息 七 ...
- Liunx运维(一)-命令行
一.命令行的开启与推出 1.exit 2.logout 3.ctrl+d 二.命令行提示符 1.#root用户 2.$普通用户 3.~当前用户所在的路径 4.全局配置文件: /etc/profil ...
- java进阶(9)--数组
一.基本概念: 1.数字为引用数据类型 2.数组实际上是一个容器,可以同时容纳多个元素 3.数组可存储基本数据类型,也可以存储引用数据类型的数据 4.数组一旦创建.长度不可变.且数组中元素类型必须统一 ...
- spring boot 整合kafka
本文为博主原创,未经允许不得转载: 1. 引入spring boot kafka依赖 <dependency> <groupId>org.springframework.kaf ...
- Servlet系列:生命周期(init、 service、destroy)详解
Servlet的生命周期是由Web容器(如Tomcat)管理的,包括以下三个阶段: 加载和实例化:当Web应用程序启动时,Web容器会加载和实例化Servlet.加载和实例化过程可以在应用程序启动时自 ...
- java - 类属性 初始化的三种形式及顺序
package chushihua; public class Hello { public static String name = getValue("属性"); { name ...
- CSS - 使用CSS 3D属性来完成页面视差滚动效果。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- .NET周刊【1月第2期 2024-01-21】
国内文章 NCC Mocha v0.1.0 发布,.NET 开发的基于 OpenTelemetry 的 APM 系统 https://mp.weixin.qq.com/s/gUx-dqlYqcwgQN ...
- [转帖]max_allowed_packet 与 SQL 长度的关系
https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000210013 适用版本:V2.1.x.V2.2.x.V3.1 ...
- [转帖]nginx 反向代理中proxy_set_header的含义
https://www.jianshu.com/p/cd813d68ed25 0.1212020.10.23 09:29:53字数 284阅读 9,939 1.proxy_set_header设置的请 ...