bzoj 4195 //4195:[NOI2015]程序自动分析 难点不是 离散化+并查集

bzoj 4195 //4195:[NOI2015]程序自动分析 难点不是 离散化+并查集   //在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=4195

更多题解,详见https://blog.youkuaiyun.com/mrcrack/article/details/90228694BZOJ刷题记录

难点不是 离散化+并查集  这两点很熟练,以下内容没有考虑到,是无法AC的。

难点的核心在于:联通具有传递性,不联通不具有传递性。2019-10-10 23:11

而是,要将关联的点先联通起来。根据这个结果,再判定接下来不关联点的联通情况:若判定还是不联通YES;若联通,矛盾NO.

//提供一组样例给读者 2019-10-10 23:09
/*
输入
1
3
1 2 0
2 3 0
1 3 1

输出
YES
*/

3556 kb 2744 ms C++/Edit 1901 B

//4195:[NOI2015]程序自动分析
//在线测评地址https://www.luogu.org/problem/P1955
//只是看完题目描述部分,感觉很像并查集
//1<=n<=10^6,1<=i,j<=10^9能明显看出要离散化
//该题离散化做好了,也就成功了90%.2019-10-8 22:26
//思路清晰,但感觉一直卡在离散化上。
//离散化时,遇到相等时,如何处理,全部扫一遍处理吗。
//离散化编写完成,突然发现,在并查集方面,逻辑出了问题,合并,判断不可满足,该如何界定呢?
//仔细想了想,
/*
分4种情况
c[i/2]==0&&f1==f2
c[i/2]==0&&f1!=f2
c[i/2]==1&&f1!=f2
c[i/2]==1&&f1==f2
去除无效的,分2种情况。
c[i/2]==0&&f1==f2
c[i/2]==1&&f1!=f2
*/
//样例通过,提交20分,测试点3-8,10WA,测试点2RE,有点失望,但心没凉。2019-10-10 17:31
//想了想,逻辑上有问题,还是要设置标记,若再次遇到同样的约束条件,需判断前后是否一致
//编写过程中,发现几处问题,如下
/*
int c[maxn],f[maxn*2],vis[maxn*2];//此处错写成int c[maxn],f[maxn],vis[maxn];猜测因此造成RE
sort(a+0,a+0+n*2,cmp1);//此处错写成sort(a+0,a+0+n,cmp1);
sort(a+0,a+0+n*2,cmp2);//此处错写成sort(a+0,a+0+n,cmp2);
*/
//深入排查的过程中,发现离散化代码有问题,以下为错误代码
/*
cnt=0,a[0].v=cnt;
for(i=1;i<n;i++)//离散化
    if(a[i].v==a[i-1].v)a[i].v=cnt;
    else a[i].v=++cnt;
*/
//以下为修改后代码
/*
cnt=0,before=a[0].v,a[0].v=cnt;//此处错写成cnt=0,a[0].v=cnt;
for(i=1;i<n*2;i++)//此处错写成for(i=1;i<n;i++)//离散化

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值