Hello, I tried to solve the problem https://www.spoj.com/problems/MATCHING/, but I got runtime error (SIGSEGV)
Here is my code:
#include <stdio.h>
#include <vector>
using namespace std;
int edge[300000];
vector<pair<int, int> > adj[100000];
bool dfs(int x)
{
int n = adj[x].size();
bool flow = false;
if(x & 1)
flow = true;
for(int i = 0; i < n; i++)
{
int y = adj[x][i].first, e = adj[x][i].second;
if(edge[e] == 0)
continue;
flow = dfs(y);
if(flow)
{
edge[e] = 0;
if(e & 1)
edge[e-1] = 1;
else
edge[e+1] = 1;
break;
}
}
return flow;
}
int main()
{
int n, m, p, a, b, res = 0;
scanf("%d %d %d", &n, &m, &p);
for(int i = 0; i < p; i++)
{
scanf("%d %d", &a, &b);
edge[i*2] = 1;
edge[i*2 + 1] = 0;
adj[a*2 - 2].push_back(make_pair(b*2 - 1, i*2));
adj[b*2 - 1].push_back(make_pair(a*2 - 2, i*2 + 1));
}
for(int i = 0; i < n; i++)
if(dfs(i*2))
res++;
printf("%d\n", res);
return 0;
}
Can anyone tell me why I got runtime error (SIGSEGV)?
Thanks.