【codevs4600 程序自动分析】奇奇怪怪然而并不会做

这道题抄的ilern神犇的代码【这里是链接,ilern神犇的博客超棒的!太强啦!%%%】,自己还是不会写。

这道题是个并查集这个能看出来,然后我一想 i, j <= 1e9,不就是int嘛,用什么离散化!然后我就开了一个1e9的数组= =【naive】但是其实空间会炸,时间上也迷得很。。。

然后ilern神犇用的unordered_map,内部元素不排序的map,c++11的容器【啊这里不大懂可能不太准确】,头文件<unordered_map> ,其他用法和map一样。map很好用啊,我才知道插入数据只需要map['a'] = 1; 这样的话map[‘a’]的值就是1,map[1]的值就是’a’。也可以用insert(),往里插pair,但是稍微麻烦一点吧。

map的count()查找有没有重复元素超好用啊,如果用数组的话就只能遍历一遍了吧。。。。对我这道题一看用个vector不行吗?返回它在数组中的编号就行了啊,但是就是查找它有没有出现过比较麻烦吧【可能是我想不出来其他的好办法了qaq】【我还想过直接用pair但是也是这个问题】

然后cmd这个结构体开得也非常妙。我一开始自己写的是读入的时候顺便判断,直接不成立还好,但是如果是新开一个不相等的我就不大会写了。。。于是开一个结构体把不相等的存下来过后再一个一个判断这个主意超棒的。

然后find()是这样写的return f[x] == x ? f[x] : f[x] = find(f[x]); 最后是find(f[x])!我这里出过好几次错了。

还有就是要注意多组数据的清零还有一开始的初始化,前面定义的cnt每次也要清!【我这里又WA了好久。。。。太辣鸡了我。。。】

这里还用了goto,不用goto的话插flag应该也是可以的。另外goto去的地方是while(T--) 前面,再重新执行一次这一句。

我后来还想用离散化,不用map,但是我会写【可能不大会写】的那种离散化是要有全部的数组元素然后进行操作的。这道题的话如果先把它都存下来,然后离散化,然后再读一遍,再操作。。。是不是不太现实?

我看UOJ上的其他神犇有写hash的,什么找到链表头的那个值用那个?qnq我不是很会用,程序也没好好看不是很懂。【hash什么的完全不会啊,回来学!】

最后%%%ilern神犇!感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值