原题链接:蓝桥杯2019年第十届省赛真题-修改数组
0.0分
33 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
如果使用unordered_map来替代数组来实现并查集的话,速度反而慢了。 #include <bits/stdc++.h> using namespace std; unordered_map<int,int> mp; int find(int x){ if(mp.count(x)) mp[x]=find(mp[x]); else{ mp[x]=x+1; return x; } return mp[x]; } int main(){ int n; cin>>n; vector<int> arr(n); for(int i=0;i<n;i++){ cin>>arr[i]; } for(int i=0;i<n;i++){ if(!mp.count(arr[i])) mp[arr[i]]=arr[i]+1; else{ arr[i]=find(arr[i]); } } for(int i=0;i<arr.size();i++) cout<<arr[i]<<" "; return 0; }查找祖宗结点函数部分,为什么换成其他的书写方式就运行超时了呢?为什么这样的书写方式直接默认了路径压缩呢?(其他的都需要额外写一部分路径压缩的代码) 比如,改成如下这种形式就会提示超时,这又跟您的代码有什么区别呢? int find(int x ) { while(x!=find(x)) { x=find(x); } return x; }