为什么会RE啊!!
查看原帖
为什么会RE啊!!
263401
Blender楼主2021/5/1 09:05
#include <bits/stdc++.h>
using namespace std;
int mat[36][37], n, m, ans = 2147483647;
int js[37];
int gcd (int a, int b){
	return b ? gcd (b, a%b) : a;
}
int lcm (int a, int b){
	return a * b / gcd (max(a,b), min(a,b));
}
void solve (){ //gauss
	for (int row=1,col=1; row<=n; col++,row++){
		int maxindex = row;
		for (int i=row+1; i<=n; i++) 
			if (abs(mat[i][col]) > abs(mat[maxindex][col]))
				maxindex = i;
		if (maxindex != row) 
			for (int i=col; i<=n+1; i++) 
				swap (mat[row][i], mat[maxindex][i]);
		if (mat[row][col] == 0){
			row --;
			continue;
		}
		for (int i=row+1; i<=n; i++){
			if (mat[i][col] == 0) continue;
			int LCM = lcm (abs(mat[row][col]), abs(mat[i][col]));
			int against = mat[row][col] * mat[i][col] < 0 ? -1 : 1;
			int p = LCM / abs(mat[i][col]), q = LCM / abs(mat[row][col]);
			for (int j=col; j<=n+1; j++)
				mat[i][j] = mat[i][j] * p - against * mat[row][j] * q;
		}
	}
	return;
}
void dfs (int r){
	if (r == 0){
		int p = 0;
		for (int i=1; i<=n; i++) p += js[i];
		ans = min (ans, p);
		return;
	}
	for (int i=r+1; i<=n; i++) mat[r][n+1] -= mat[r][i] * js[i];
	if (abs(mat[r][r]) & 1){
		if (abs(mat[r][n+1]) & 1) js[r] = 1;
		else js[r] = 0;
		dfs (r-1);
	}
	else{
		if (abs(mat[r][n+1]) & 1) return;
		js[r]=0;
		dfs (r-1);
		js[r]=1;
		dfs (r-1);
	}
	return;
}
int main (){
	scanf ("%d%d", &n, &m);
	for (int i=1; i<=m; i++){
        int a, b;
        scanf ("%d%d", &a, &b);
        mat[a][b] = mat[b][a] = 1;
    }
    for (int i=1; i<=n; i++) mat[i][i] = mat[i][n+1] = 1;
	solve ();
	dfs (n);
	cout << ans;
	return 0;
}

出了什么问题呢?麻烦指教一下

2021/5/1 09:05
加载中...