hdu 6109 数据分割(并查集,倍增)

来源:互联网 发布:网络语言6的意思 编辑:程序博客网 时间:2024/06/05 08:54

题意:比较绕,n个表达式,表示a==b或者a!=b,有矛盾就重新开始,问可以分成多少段,每段多大。。


思路:倍增,On判断,也可以并查集加set维护(合并要注意使得集合头要是最早出现的。。),这里提供一下倍增的做法

PS。顺便吐槽一下百度之星的测评姬。。。还想吐槽一下自己比去年大概还弱,,今年怕是要打铁了

代码:

#include<bits/stdc++.h>using namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair#define X first#define Y secondtypedef unsigned long long ll;typedef pair<int,int> pii;const int maxn=1e6+10;using namespace std;int n,a[maxn],b[maxn],c[maxn];int f[maxn];int fin(int x){    if(x==f[x]) return x;    return f[x]=fin(f[x]);}int un(int x,int y){    int fx=fin(x),fy=fin(y);    if(fx!=fy) f[fx]=fy;}int ok(int l,int r){    if(r>=n) return 0;    int ret=1;    for(int i=l;i<=r;i++) if(c[i]==1) un(a[i],b[i]);    for(int i=l;i<=r;i++) if(c[i]==0&&fin(a[i])==fin(b[i])) ret=0;    for(int i=l;i<=r;i++) f[a[i]]=a[i],f[b[i]]=b[i];    return ret;}int main(){    while(scanf("%d",&n)!=EOF){        for(int i=0;i<n;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]);        for(int i=0;i<n+10;i++) f[i]=i;        int l=0;        vector<int> ans;        while(l<n){            int d=1;            int ll=l;            while(ok(l,ll+d)){               while(ok(l,ll+d*2)) d*=2;               ll+=d;               d=1;            }            if(ll+d<n)ans.PB(ll+d-l+1);            l=ll+d+1;        }        printf("%d\n",ans.size());        for(int i=0;i<ans.size();i++)            printf("%d\n",ans[i]);    }    return 0;}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 AAC版本受保护怎么办 手机提示更新版本怎么办 小米6按键松动怎么办 魅族note6已锁定怎么办 淘宝买东西降价了怎么办 加盟保证金不退怎么办 支付宝两个账号怎么办 微店被投诉售假怎么办 微店屏蔽搜索怎么办 在单位辞职保险怎么办 换奶粉期间拉稀怎么办 小孩换奶粉拉肚子怎么办 换奶粉没有过渡怎么办 婴儿换奶粉腹泻怎么办 胎心率超过160怎么办 孕妇饮奶粉上火怎么办 孕妇奶粉上火的怎么办 喝孕妇奶粉上火怎么办 血糖仪开不了机怎么办 小安素太甜孩子不喜欢喝怎么办 宝宝吃山药过敏怎么办 雅培奶粉上火怎么办 奶粉引起的湿疹怎么办 换奶粉宝宝不吃怎么办 宝宝上吐下泻不吃东西怎么办 hm少衣服了怎么办 手机店生意差怎么办 房子装修不交工怎么办 m651cy手机很卡怎么办 荣耀10掉电严重怎么办 华为手机掉电快怎么办 联想拯救者进水怎么办 手机充电充不满怎么办 一体手机鼓包了怎么办 蔻驰的会员怎么办 淘宝网不退款怎么办 淘宝商家欺诈消费者怎么办 淘宝没货了怎么办 天猫店价格欺骗客户怎么办 天猫欺诈消费者怎么办 空调换热器分流不均怎么办