【BZOJ1854】【codevs3358】游戏,二分图最大匹配
来源:互联网 发布:浅野菌子淘宝 编辑:程序博客网 时间:2024/06/05 00:40
传送门1
传送门2
写在前面:
昨天的题解终于写完了
思路:
一开始写的dinic,i=1-10000一个个枚举判断的,但因为每次都跑dinic导致T成狗,只过了50分,后来不得已现学了匈牙利,才过的……
左边1-10000,右边装备,对应的相连,枚举i=1-10000,看看i能不能得到匹配就可以了,不能就中断,答案就是i-1
原理就是每次得到的都是更大的匹配,不会使之前的匹配减少
注意:小心爆M
代码:
#include<bits/stdc++.h>#define inf 0x7fffffusing namespace std;int n,tot=1;int first[1020000],belong[1020000],vis[1020000];struct edge{ int v,next;}e[2000200];queue<int>q;void add(int x,int y){e[++tot]=(edge){y,first[x]};first[x]=tot;}int in(){ int t=0;char ch=getchar(); while (!isdigit(ch)) ch=getchar(); while (isdigit(ch)) t=(t<<3)+(t<<1)+ch-48,ch=getchar(); return t;}bool dfs(int x){ for (int i=first[x];i;i=e[i].next) if (vis[e[i].v]!=x) { vis[e[i].v]=x; if (!belong[e[i].v]||dfs(belong[e[i].v])) { belong[e[i].v]=x; return 1; } } return 0;}main(){ n=in(); for (int i=1;i<=n;i++) add(in(),i+10000), add(in(),i+10000); for (int i=1;i<=10000;i++) if (!dfs(i)) {printf("%d",i-1);return 0;} printf("10000");}
0 0
- 【BZOJ1854】【codevs3358】游戏,二分图最大匹配
- [bzoj1854][二分图匹配]游戏
- bzoj1854 [Scoi2010]游戏 并查集/二分图最大匹配
- 【bzoj1854】 SCOI2010游戏 二分图匹配
- [BZOJ1854][Scoi2010]游戏(二分图匹配)
- 【bzoj1854 Scoi2010】游戏(二分图匹配)
- bzoj1854: [Scoi2010]游戏(二分图匹配)
- bzoj1854(二分图匹配)
- [bzoj1854][Scoi2010]游戏(并查集/二分图最大匹配)
- BZOJ1854 [Scoi2010]游戏(并查集/二分图匹配)
- bzoj1854 游戏 最大匹配/并查集
- [BZOJ1854][Scoi2010]游戏(二分图)
- 二分图匹配——BZOJ1854/Luogu1640 [SCOI2010]连续攻击游戏
- 【二分图最大匹配】矩阵游戏
- 【SCOI2010】【二分图最大匹配】游戏
- HDU1281棋盘游戏 二分图最大匹配
- [Tjoi2016&Heoi2016]游戏 二分图最大匹配
- 二分图最大匹配
- 虚拟机桥接上不去网
- Toast消息提示和Notification通知
- LeetCode LeetCode 205. Isomorphic Strings(同形词)
- Leetcode_347_Top K Frequent Elements
- MAC,IP,路由传输封装过程
- 【BZOJ1854】【codevs3358】游戏,二分图最大匹配
- Linux script and scriptreplay(三)
- LeetCode 206. Reverse Linked List(翻转链表)
- linux core文件
- 数据研发工程师实习面试问题记录一
- mysql 登录、退出
- ASP.NET 状态管理(视图状态 ViewState)
- tda2822功放
- Unity3D入门(rolling ball)——学习笔记