inline void karen114514() { int n,m; cin>>n>>m; vi fa(n+1); for(int i=1;i<=n;i++)fa[i]=i; int u,v; char t; function<int (int)> find=[&](int x){ return fa[x]==x?x:find(x); }; auto marge=[&](int u,int v){ int fu=find(u),fv=find(v); if(fu!=fv){ fa[fu]=fv; return 1; } return 0; }; for(int i=1;i<=m;i++){ cin>>t>>u>>v; if(merge(u,v)){ cout<<"NO"<<endl; } else cout<<"YES"<<endl; } }这段代码哪里写错了
时间: 2024-04-10 21:33:33 浏览: 82
这段代码存在几个问题:
1. 在函数 `marge` 的定义中,函数名拼写错误,应该是 `merge` 而不是 `marge`。
2. 在 `merge` 函数中,调用了 `find` 函数,但是在函数定义之前进行了调用。你可以将 `find` 函数的定义提前到 `merge` 函数之前,或者在函数开头进行函数声明。
3. 在循环体内部的 `if` 语句中,调用了 `merge` 函数,但是实际上函数名应该是 `marge`(或者是你修正后的 `merge`)。
因此,正确的代码应该是这样的:
```cpp
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
inline void karen114514() {
int n, m;
cin >> n >> m;
vector<int> fa(n + 1);
for (int i = 1; i <= n; i++) fa[i] = i;
int u, v;
char t;
function<int(int)> find = [&](int x) {
return fa[x] == x ? x : find(fa[x]);
};
auto merge = [&](int u, int v) {
int fu = find(u), fv = find(v);
if (fu != fv) {
fa[fu] = fv;
return 1;
}
return 0;
};
for (int i = 1; i <= m; i++) {
cin >> t >> u >> v;
if (merge(u, v)) {
cout << "NO" << endl;
}
else {
cout << "YES" << endl;
}
}
}
```
这个修正后的代码应该能够正确运行了。
阅读全文