[英]Why this code is giving segmentation fault for large input
这是一个简单的 dfs 程序,计算顶点为 1 的组件中的边数。
测试用例: https://www.dropbox.com/s/4844zj7xnp4qw77/test.txt?dl=0不知道为什么会出现分段错误; 请帮我解决这个错误。
#include<bits/stdc++.h>
using namespace std;
const int MXN = 1e6 + 2;
vector<int> adj[MXN];
int vis[MXN];
int n;
long long edges=0;
void dfs(int x) {
edges+=adj[x].size();
vis[x]=1;
for (int i=0;i<adj[x].size();i++) {
int y=adj[x][i];
if ( !vis[y]) {
dfs(y);
}
}
}
void solve() {
cin >> n;
for(int i=0;i<n-1;i++ ) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1);
cout<<edges/2<<endl;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cout << fixed << setprecision(6);
#ifdef LOCAL
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t = 1;
while (t--) {
solve();
}
}
如果您使用的是基于 unix 的操作系统,请在执行后尝试编译
ulimit -s unlimited
这会将您的堆栈大小设置为无限,并且应该消除堆栈缓冲区的溢出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.