向 Kattis 在线评委提交 c++ 程序时出现未知运行时错误
Unknown run time error when submitting c++ program to Kattis online judge
我一直在尝试提交我的解决方案,以解决Kattis问题几乎联合查找,我的解决方案通过了第一个测试用例,但在第二个测试用例中,它收到了运行时错误。我收到消息"以信号 11 (SIGSEV( 退出",表示违反分段。但是,我不知道导致错误的原因是什么,并且是C ++编程的新手,因此任何帮助将不胜感激。
我的程序:
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <unordered_set>
using namespace std;
typedef vector<int> vi;
unordered_set<int> seen(100000);
class UnionFind{
private: vi p, rank;
public:
UnionFind(int N){
p.assign(N,0);
rank.assign(N,0);
for(int i = 0; i < N; i++)
p[i] = i;
}
int findSet(int i){
return (p[i] == i) ? i : p[i] = findSet(p[i]);
}
bool isSameSet(int i, int j){
return findSet(i) == findSet(j);
}
void unionSet(int i, int j){
if(!isSameSet(i,j)){
int x = findSet(i), y = findSet(j);
if(rank[x] > rank[y]) p[y] = x;
else{
p[x] = y;
if(rank[x] == rank[y]) rank[y]++;
}
}
}
void moveSet(int i, int j){
if(!isSameSet(i,j)){
int x = findSet(j);
p[i] = x;
}
}
void printVals(int i){
int sum = 0;
int counter = 0;
for(auto itr = seen.begin(); itr != seen.end(); ++itr){
if(isSameSet(i,*itr)){
sum += *itr;
++counter;
}
}
printf("%d %dn",counter,sum);
}
};
int main() {
int N, M;
while(scanf("%d %d",&N, &M) != EOF){
UnionFind uf(M);
for(int i = 0; i < M; i++){
int a,b,c;
scanf("%d %d",&a, &b);
//printf("a:%d b:%d c:%dn",a,b,c);
if(a == 1){
scanf("%d",&c);
seen.insert(b);
seen.insert(c);
uf.unionSet(b,c);
}
else if(a == 2){
scanf("%d",&c);
seen.insert(b);
seen.insert(c);
uf.moveSet(b,c);
}
else if(a == 3){
uf.printVals(b);
}
}
seen.clear();
}
return 0;
}
您应该向我们显示导致错误的输入值。
无论如何。。。在UnionFind
方法中,您可以访问p
和rank
向量;但是您确定您正在访问分配的职位吗?
也就是说:你确定当你打电话(通过示例(时
p[i]
在findset()
,i
比p.size()
低?
建议:将所有对operator[]
的调用(在没有边界检查的情况下运行(替换为对at()
的调用(执行边界检查并在失败时引发异常(
所以在所有UnionFind
方法中p.at(i)
而不是p[i]
和rank.at(x)
而不是rank[x]
.
如果问题出在这里,你应该得到一个例外而不是sigsegv。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 分配给gslice_array会导致运行时错误
- cout 新创建的对象引发运行时错误
- C++在使用std::multimap时出现运行时错误的几率很小
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 试图找出为什么我会收到运行时错误?
- 向 Kattis 在线评委提交 c++ 程序时出现未知运行时错误
- std :: list(双重链接列表)未知运行时错误