题意:



思路:

1.二分+线段树(但是会TLE 本地测没有任何问题,但是POJ上就是会挂……)

2.二分+并查集

我搞了一下午+一晚上才搞出来…………..(多半时间是在查错)

首先 如果我们想知道这头奶牛之前的奶牛回答的是不是错的怎么办呢?

把回答的A从大到小排个序。这里有几种错的方式:

  1. 如果后面的区间完全被前面的区间包含,这是错的
  2. 如果有两个不相交的区间的A是一样的,这也是错的(题目保证没有两堆干草的数量是一样的)

注意取相同A的区间的时候不要超过当前二分的mid

并查集的使用也很关键……

如果是第一次覆盖 每回暴力修改一个区间

随后就可以跳着修改了…..

(有很多很多小技巧 感谢NEIGHTHORN的帮助 (和队长的代码))

//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int n,q,ans=0,f[1111111];
struct Section{int from,to,minn;}sec[25555],cpy[25555];
bool cmp(Section a,Section b){return a.minn>b.minn;}
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
inline bool check(int pos){
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=pos;i++)cpy[i]=sec[i];
sort(cpy+1,cpy+1+pos,cmp);
for(int i=1,j;i<=pos;i=j+1){
int x=cpy[i].from,y=cpy[i].to,X=x,Y=y;
j=i;
while(cpy[j].minn==cpy[j+1].minn&&j+1<=pos){
j++;
x=max(x,cpy[j].from),X=min(X,cpy[j].from);
y=min(y,cpy[j].to),Y=max(Y,cpy[j].to);
}
if(y<x||find(y)<x)return 0;
while(X<=Y)
if(find(Y)==Y)f[Y]=find(X-1),Y--;
else Y=find(Y);
}
return 1;
}
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<=q;i++)
scanf("%d%d%d",&sec[i].from,&sec[i].to,&sec[i].minn);
int l=1,r=q;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid))l=mid+1;
else r=mid-1,ans=mid;
}
printf("%d\n",ans);
}

POJ 3657 并查集的更多相关文章

  1. poj 1984 并查集

    题目意思是一个图中,只有上下左右四个方向的边.给出这样的一些边, 求任意指定的2个节点之间的距离. 就是看不懂,怎么破 /* POJ 1984 并查集 */ #include <stdio.h& ...

  2. poj 1797(并查集)

    http://poj.org/problem?id=1797 题意:就是从第一个城市运货到第n个城市,最多可以一次运多少货. 输入的意思分别为从哪个城市到哪个城市,以及这条路最多可以运多少货物. 思路 ...

  3. POJ 2492 并查集扩展(判断同性恋问题)

    G - A Bug's Life Time Limit:10000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  4. POJ 2492 并查集应用的扩展

    A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28651 Accepted: 9331 Descri ...

  5. POJ 3228 [并查集]

    题目链接:[http://poj.org/problem?id=3228] 题意:给出n个村庄,每个村庄有金矿和仓库,然后给出m条边连接着这个村子.问题是把所有的金矿都移动到仓库里所要经过的路径的最大 ...

  6. poj 1733 并查集+hashmap

    题意:题目:有一个长度 已知的01串,给出多个条件,[l,r]这个区间中1的个数是奇数还是偶数,问前几个是正确的,没有矛盾 链接:点我 解题思路:hash离散化+并查集 首先我们不考虑离散化:s[x] ...

  7. poj 3310(并查集判环,图的连通性,树上最长直径路径标记)

    题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...

  8. poj 2236 并查集

    并查集水题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...

  9. poj 1417(并查集+简单dp)

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2087   Accepted: 640 Descrip ...

随机推荐

  1. 2017-3-7 leetcode 66 119 121

    今天纠结了一整天============================================================== leetcode66 https://leetcode.c ...

  2. windows命令行方式下打印和设置PATH变量

    点击开始菜单,运行=>cmd打印当前变量:echo %PATH%结果:C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;d:\PRO ...

  3. PHPMailer使用说明

    PHPMailer是一个用来发送电子邮件的函数包,远比PHP提供的mail()方便易用. 邮件格式说明 一封普通的电子邮件,通常是由发件人.收件人.抄送人.邮件标题.邮件内容.附件等内容构成.以下是一 ...

  4. infludb语法--官网

    https://docs.influxdata.com/influxdb/v0.8/api/query_language/ InfluxDB features a SQL like query lan ...

  5. <Android Framework 之路>Android5.1 Camera Framework(三)

    上一次讲解了一下startPreview过程,主要是为了画出一条大致的从上到下的线条,今天我们看一下Camera在Framework的sendCommand和dataCallback,这部分属于衔接过 ...

  6. ListView的Item动画

    1.效果图 2.需求就是点击item歌曲时,实现一种飞入到预约按钮处的效果 3.思路:在布局文件中加入了一个条目布局,和listView的item一样,点击listView的item时,使用给条目布局 ...

  7. jquery.zclip.js复制到剪切板

    参考http://www.cnblogs.com/PeunZhang/p/3324727.html 需要引用jquery.zclip $("#id").zclip({ path: ...

  8. ajax返回值

    前端: <html> <head> <meta name="viewport" content="width=device-width&qu ...

  9. Linux中删除特殊符号文件名文件

    Linux 系统下的文件名长度最多可到256个字符.通常情况下,文件名的字符包括:字母.数字.“.”(点).“_”(下划线)和“-”(连字符). Linux 允许在文件名中使用除上述符号之外的其它符号 ...

  10. java文件名与class关系

    class与文件名没有必要关系但是public class是要绝对保持一致 例如:class test{ public static void main(String args[]){ System. ...