链接啊:点击打开链接
这个破题也是简单的要死啊啊啊啊啊啊
读完题就觉得是什么裸的图论模板,咋抽咋眼熟→_→ 学弟后来说是最小点覆盖,暑假集训的时候说过啊啊啊啊啊啊啊T^T
最小点覆盖就是二分图最大匹配啊啊啊啊啊 能不能长点心啊啊啊啊啊
还有注意第一句话的写法~
# include <bits/stdc++.h>
#include<cstdio>
using namespace std;
typedef long long int lli;
const int maxn = 505;
int n, m;
bool lk[maxn][maxn];
int mk[maxn];
bool vis[maxn];
bool dfs(int cur) {
for (int i = 1; i <= n; ++i) {
if (lk[cur][i] && !vis[i]) {
vis[i] = true;
if (mk[i] == 0 || dfs(mk[i])) {
mk[i] = cur;
return true;
}
}
}
return false;
}
int solve() {
memset(mk, 0, n+1);
int tmp = 0;
for (int i = 1; i <= n; ++i) {
memset(vis, false, n+1);
if (dfs(i)) ++tmp;
}
return tmp/2;
}
int main()
{
//freopen("cin.txt","r",stdin);
cin.tie(0);
ios_base::sync_with_stdio(false);
while (cin >> n >> m) {
for (int i = 1; i <= n; ++i) {
memset(lk[i]+1, false, n);
}
for (int i = 0; i < m; ++i) {
int u, v; cin >> u >> v;
lk[u][v] = true;
lk[v][u] = true;
}
cout << solve() << endl;
}
return 0;
}
就看在我这么认真做错题的份上,明天比赛成绩好一点行不行啊T^T