main
黄海 1 year ago
parent 8ce3927cb6
commit 4b931580d4

@ -0,0 +1,42 @@
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, m, ans, st[N];
int a[N][N];
bool check(int u) {
for (int i = 1; i < u; i++)
if (st[i] && a[u][i]) return false;
return true;
}
void dfs(int u, int sum) { // 第u号钻石之前一共选了sum个钻石
if (u == n + 1) { // 如果所有钻石都找完了
ans = max(ans, sum); // 取最大值
return;
}
// 如果剩下的钻石都选也没有已有的最好情况多,返回,剪枝
// if (ans > sum + (n - u + 1)) return;
if (check(u)) { // 当前钻石与已选钻石没有冲突
st[u] = 1; // 选之
dfs(u + 1, sum + 1); // 继续下一个钻石
st[u] = 0; // 不选
}
dfs(u + 1, sum); // 继续下一个钻石
}
int main() {
cin >> n >> m;
while (m--) {
int x, y;
cin >> x >> y;
a[x][y] = a[y][x] = 1; // x<->y互相冲突
}
dfs(1, 0); // 从第一个钻石开始选目前已选0个
cout << ans << endl;
return 0;
}
Loading…
Cancel
Save