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++)//离散化

最低0.47元/天 解锁文章
427

被折叠的 条评论
为什么被折叠?



