题解 | #while#

while

https://ac.nowcoder.com/acm/contest/108038/A

#include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 5; vector a; vector pre; unordered_map<int, int> me; int root(int x) { if (pre[x] == x) return x; return pre[x] = root(pre[x]); } void join(int x,int y) { int ry = root(y); int rx = root(x); if (rx != ry) { if (rx < ry) { swap(rx, ry); } pre[ry] = rx; } } int main() { int t; cin>>t; while(t--) { int n; cin>>n; me.clear(); a.clear(); a.resize(n + 2); pre.clear(); pre.resize(n + 2); for (int i = 1; i <= n; i++) { cin>>a[i]; me[a[i]] = i; pre[i] = i; } for (int i = 1;i <= n;i++) { int x = a[i]; if (me.find(x - 1) != me.end()) { join(i, me[x - 1]); } if (me.find(x + 1) != me.end()) { join(i, me[x + 1]); } } set s; for (int i = 1; i <= n; i++) { s.insert(root(i)); //cout<<root(a[i])<<endl; } cout<<s.size() - 1<<endl;; } }

全部评论

相关推荐

10-09 09:19
已编辑
沈阳农业大学 C++
修订
丿南烟丶:个人评价可以删掉 两个项目都是轮子项目,把一个转换成应用型项目,把MySQL和redis用起来 另外项目的时间可以标明一下
最后再改一次简历
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务