钱诺心中思忖道:“清虚大帝果然是厉害。”立刻不再有所保留,手中飞出了那柄纪太虚炼制的长剑,对着清虚大帝一劈,便见一道仿若是黑色火焰一般的剑气朝着清虚大帝轰去。清虚大帝眼中精光一闪,手中的神斧一晃,便见到一道罡气从神斧之上飞出,将这道黑色火焰一般的剑气给击散,成了无边的流光。

“就在这山顶之上,”老太婆道,“在这炎山山顶有一个天然湖泊,名为玄寒天池。这山中溪流里的溪水,便是从那天池流下来的。只是,管理玄天上道境的真武元帅已在这山中布下无数禁制,但是无妨,你只要按我的吩咐去做,这些禁制便能一一避过。此外,在天池附近还有四只神兽分镇在周围,守在南面的是玄天灵龟,我可教你骗过它,这样,你便可以进入天池。”

玩游戏能赚

尽管武魂殿明令禁止魂师们大范围猎杀魂兽获取魂骨的行为,但仍旧有不少自恃实力的魂师铤而走险。当然,也没有多少人舍得把魂骨卖出去,大都是相互交换。
叶扬撇了撇嘴说道:“我看你刚才那踹人的架势,一下子便喜欢上了,所以想和你交个朋友。”

这两天他正心烦意乱”不料胡商也来给他添乱,他正要出去。忽然心中一动,这不就是天大的好机会吗?他一挥手令道:“不要理他们,把大门关上!”

每组操作形式为


Description

(n)组操作,每组操作形式为(x;y;p)
(p)(1)时,如果第(x)变量和第(y)个变量可以相等,则输出(YES),并限制他们相等;否则输出(NO),并忽略此次操作。
(p)(0)时,如果第(x)变量和第(y)个变量可以不相等,则输出(YES),并限制他们不相等 ;否则输出(NO),并忽略此次操作。

Input

输入一个数(n)表示操作的次数((n<=10^5))
接下来(n)行每行三个数(x;y;p) ((x,y<=10^8,0≤p≤1))

Output

对于(n)行操作,分别输出(n)(YES)或者(NO)

Solution

没想到假的启发式合并也能A题啊。。。
正解其实跟考试时候的思路差不多
但是不是维护每个联通块的大小
因为有可能一个联通块大小比较小但是连出去的边有很多
所以我们要换一种数据结构维护每个联通块连出去了多少条边
用什么数据结构可以维护大小,快速查找两个元素是否有关系呢?
嗯... (STL)(set) 是符合要求的 查询大小是 (O(1)) 的,查找是 (O(nlogn))
所以我们用一个 (set) (s[i]) 表示以 (i) 为根的联通块连出去的边(这里连边表示规定两个联通块严格不相等)
考虑操作
如果要求两个变量相等,那么就在两个联通块的 (set) 里找是否存在一条边连到了对方,如果有,那么此条件无法满足。
如果要求两个变量不相等,那么假设它们不在一个联通块里,需要合并这两个联通块,就要用到启发式合并了。
注意到我们已经记录了两个联通块连出去边的个数了, 为了保证复杂度,一定是想让连边少的联通块合并到连边多的联通块里。这就是启发式合并了。

Code

#include<set>
#include<map>
#include<cstdio>
#define N 100005

int n,tot;
int ques[N][5];
int father[N<<1];
std::map<int,int> mp;
std::set<int> s[N<<1];

int find(int x){
    if(father[x]==x) return x;
    return father[x]=find(father[x]);
}

signed main(){
    scanf("%d",&n);
    for(int x,y,i=1;i<=n;i++){
        scanf("%d%d%d",&x,&y,&ques[i][3]);
        if(!mp[x]) mp[x]=++tot;
        if(!mp[y]) mp[y]=++tot;
        ques[i][1]=mp[x];
        ques[i][2]=mp[y];
    }
    for(int i=1;i<=tot;i++) father[i]=i;
    for(int i=1;i<=n;i++){
        int r1=find(ques[i][1]);
        int r2=find(ques[i][2]);
        if(ques[i][3]==1){
            if(r1==r2) {puts("YES");continue;}
            if(s[r1].find(r2)!=s[r1].end() or s[r2].find(r1)!=s[r2].end()){
                puts("NO");
                continue;
            }
            if(s[r1].size()>s[r2].size()) r1^=r2^=r1^=r2;
            std::set<int>::iterator it;
            for(it=s[r1].begin();it!=s[r1].end();it++)
                s[r2].insert(*it),s[*it].insert(r2),s[*it].erase(r1);
            father[r1]=r2;
            puts("YES");
        }
        else{
            if(r1==r2) {puts("NO");continue;}
            if(s[r1].find(r2)!=s[r1].end() or s[r2].find(r1)!=s[r2].end()){
                puts("YES");
                continue;
            }
            s[r1].insert(r2);
            s[r2].insert(r1);
            puts("YES");
        }
    }
    return 0;
}

当前文章:http://hnhdqp.com/news2018111848234/

发布时间:2018-12-15 05:19:04

女人需要努力挣钱吗? 2018qq自由幻想赚rmb 阿里云服务器挂机赚钱 现今无本赚钱热点 适合宝妈在家的工作 在家带小孩的女人适合做什么工作 薅羊毛什么梗 手机兼职打码

编辑:公陵

相关新闻

奇迹MU开发商网禅MMO新作曝光 下半年上市

2018-12-15 06:17:03

沛县丝芳怪工作室

新版本剑灵赚钱小技巧 四开搬砖多快好省

2018-12-15 07:08:00

榆林谠接工程有限公司

七V盒子京东首发 0元预定抢马尔代夫双人五日游

2018-12-15 04:08:15

广东鼓房电子有限公司

品质与体验,泰笛创始人姚宗场阐述成功两大法宝

2018-12-15 02:39:31

肇庆了妒商贸有限公司

热门推荐

  • 湖南绥宁:油菜花香春意浓 产业扶贫拓新路
  • 谷歌Chrome针对Windows 10二合一等设备优化:支持下拉刷新
  • 京东年货节2月18日:3C数码1000神券,百万件商品满299减100
  • 【一线】马云达沃斯论坛谈全球贸易:贸易不是武器,而是解决方案
  • 麦当劳中国改名内情:美方不让用原名,一气之下改叫金拱门
  • LG计划升级OLED电视:更加智能,支持120FPS视频
  • 1799元起,金立S11/S11S今日上午10点开抢
  • 签好的房屋买卖合同能变卦?一篇文章教你怎么避坑!
  • 特斯拉回应种族歧视诉讼:这是“假消息的温床”
  • 旅游旺季哪里寻旅游牛股?听听专家有什么秘笈
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:怎么赚钱现实点的 免费网上赚钱
  • 在家上网干什么赚钱 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 在家如何网上兼职打字赚钱 想做网上兼职 网络兼职打字员 怎么攒钱