您的位置:首页 > 其它

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

2017-02-05 11:42 330 查看
这道题抄的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神犇!感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: