1 / 1
Dec 2021

Hello, I tried to solve the problem https://www.spoj.com/problems/MATCHING/5, 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.