[luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)
生活随笔
收集整理的這篇文章主要介紹了
[luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送門
?
我們將每一個屬性和物品連邊,然后枚舉從小到大屬性跑匈牙利,直到找不到連邊
#include <cstdio> #include <cstring> #include <iostream> #define N 1000001 #define M 2000001using namespace std;int n, cnt; int head[N], to[M], nex[M], belong[N]; bool vis[N];inline int read() {int x = 0, f = 1;char ch = getchar();for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';return x * f; }inline void add(int x, int y) {to[cnt] = y;nex[cnt] = head[x];head[x] = cnt++; }inline bool dfs(int u) {int i, v;for(i = head[u]; ~i; i = nex[i]){v = to[i];if(!vis[v]){vis[v] = 1;if(!belong[v] || dfs(belong[v])){belong[v] = u;return 1;}}}return 0; }inline int solve() {int i, ans = 0;for(i = 1; i <= 10000; i++){memset(vis, 0, sizeof(vis));if(dfs(i)) ans++;else return ans;}return ans; }int main() {int i, x, y;n = read();memset(head, -1, sizeof(head));for(i = 1; i <= n; i++){x = read();y = read();add(x, i);add(y, i);}printf("%d\n", solve());return 0; }
轉載于:https://www.cnblogs.com/zhenghaotian/p/8257345.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的[luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu1404 开启定时任务 cr
- 下一篇: STM32下载库资料