游戏 BZOJ

来源:互联网 发布:嘉年华st轮毂数据 编辑:程序博客网 时间:2024/06/05 15:49

题目传送门

思路:一个二分图最大匹配问题,但是这个题emmm,因为memset用的次数太多被卡常数了,然后就看到了一个神奇的做法,可以只清空一次数组的黑科技做法。

#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <list>#include <map>#include <queue>#include <set>#include <stack>#include <string>#include <vector>#define MAXN 1000100#define MAXE 10100#define INF 1e9#define MOD 100003#define LL long long#define ULL unsigned long long#define pi 3.14159using namespace std;vector<int> vec[MAXE];int vis[MAXN];int match[MAXN];bool dfs(int x, int y) {    for (int i = 0; i < vec[x].size(); ++i) {        int v = vec[x][i];        if (vis[v] != y) {            vis[v] = y;            if (match[v] == -1 || dfs(match[v], y)) {                match[v] = x;                return true;            }        }    }    return false;}int main() {    std::ios::sync_with_stdio(false);    int n;    cin >> n;    memset(match, -1, sizeof(match));    memset(vis, 0, sizeof(vis));    int x, y;    for (int i = 1; i <= n; ++i) {        cin >> x >> y;        vec[x].push_back(i);        vec[y].push_back(i);    }    int ans = 0;    for (int i = 1; i <= 10000; ++i) {        if (dfs(i, i)) {            ans++;        } else {            break;        }    }    cout << ans << endl;    return 0;}
原创粉丝点击