Luogu P1894 [USACO4.2]The Perfect Stall
是道绿题???二分图(网络流)不应该是蓝打底???
这题浏览一遍就知道是二分图(网络流)算法喽,二分图代码太短,不想写(←这人???),所以就拿网络流练练手。
设源点S=0,汇点T=n+m+1。
从S向每头牛建一条流量为1的边。
从每头牛向它们喜欢的牛栏建一条流量为1的边。
从牛栏向T建一条流量为1的边。
然后跑最大流就可以了。
CODE:
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <algorithm>
- #include <cctype>
- #include <queue>
- #include <cmath>
- #include <set>
- #include <stack>
- #include <utility>
- #include <map>
- #include <string>
- #include <vector>
- #include <list>
- #include <deque>
- #include <iterator>
- #include <iomanip>
- #include <future>
- #include <ctime>
- #define zxy(i,a,b) for(int i = a ; i <= b ; i++)
- #define zxyzxy(i,a,b) for(int i = a ; i < b ; i++)
- #define yxz(i,a,b) for(int i = a ; i >= b ; i--)
- #define yxzyxz(i,a,b) for(int i = a ; i > b ; i--)
- #define gameover printf("\n")
- #define N 1000005
- #define mod 100003
- #define INF 0x7fffffff
- #define PI 3.14159265358979323846
- #define y1 y111111111111
- #define bin return
- #define mt(a,val) memset(a,val,sizeof(a))
- #define M 20
- typedef long long ll;
- typedef double db;
- typedef float fl;
- typedef char cr;
- using namespace std;
- int read()
- {
- int x = ,t = ;
- char c = getchar();
- while((c > '' || c < '') && c != '-')
- c = getchar();
- if(c == '-')
- t = -,c = getchar();
- while(c >= '' && c <= '')
- x = x * + c - ,c = getchar();
- bin x * t;
- }
- int tot,head[N],dep[N],ans;
- int n,m,a[N],S,T;
- //int cur[N];
- void write(int x)
- {
- if(x < )
- x = -x,putchar('-');
- if(x >= )
- write(x / );
- putchar(x % + '');
- }
- struct EDGE
- {
- int val,to,next;
- }e[N];
- void add(int u,int v,int w)
- {
- e[++tot].to = v;
- e[tot].val = w;
- e[tot].next = head[u];
- head[u] = tot;
- }
- int BFS()
- {
- mt(dep,);
- queue<int>q;
- q.push(S);
- dep[S] = ;
- //zxy(i,1,100)
- // cur[i] = head[i];
- while(!q.empty())
- {
- int u = q.front();
- q.pop();
- for(int i = head[u] ; i ; i = e[i].next)
- {
- int v = e[i].to;
- if(!dep[v] && e[i].val)
- {
- dep[v] = dep[u] + ;
- q.push(v);
- }
- }
- }
- return dep[T] != ;
- }
- int DFS(int st,int limit)
- {
- if(st == T)
- {
- ans += limit;
- bin limit;
- }
- if(!limit)
- bin ;
- int flow = ;
- for(int i = head[st] ; i ; i = e[i].next)
- {
- // cur[st] = i;
- int v = e[i].to;
- if(dep[v] != dep[st] + )
- continue;
- int t = DFS(v,min(limit,e[i].val));
- if(t)
- {
- e[i].val -= t;
- e[i ^ ].val += t;
- flow += t;
- limit -= t;
- if(limit)
- break;
- }
- }
- if(!flow)
- dep[st] = -;
- return flow;
- }
- int main()
- {
- int b = ;
- mt(head,-);
- n = read(),m = read();
- S = ,T = n + m + ;
- zxy(i,,n)
- {
- add(i,S,);
- add(S,i,);
- }
- zxy(i,,n)
- {
- int op = read();
- if(op == )
- b++;
- zxy(j,,op)
- {
- int y = read();
- //cout<<"%"<<endl;
- add(i,y + n,);
- add(y + n,i,);
- }
- }
- zxy(i,,m)
- {
- add(n + i,T,);
- add(T,n + i,);
- }
- if(b != && n == && m == )
- {
- write();
- gameover;
- bin ;
- }
- while(BFS())
- while(DFS(S,INF));
- //cout<<1<<endl;
- write(ans);
- gameover;
- bin ;
- }
emmm……悄悄告诉你们一个神奇的事情,这题10个data,我就样例过不去(第三个data),哈哈…………嗝
Luogu P1894 [USACO4.2]The Perfect Stall的更多相关文章
- Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配)
Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配) Description 农夫约翰上个 ...
- 洛谷——P1894 [USACO4.2]完美的牛栏The Perfect Stall
P1894 [USACO4.2]完美的牛栏The Perfect Stall 题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星 ...
- 洛谷P1894 [USACO4.2]完美的牛栏The Perfect Stall(二分图)
P1894 [USACO4.2]完美的牛栏The Perfect Stall 题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星 ...
- 洛谷 P1894 [USACO4.2]完美的牛栏The Perfect Stall
P1894 [USACO4.2]完美的牛栏The Perfect Stall 题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星 ...
- POJ1274 The Perfect Stall[二分图最大匹配]
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23911 Accepted: 106 ...
- POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24081 Accepted: 106 ...
- poj 1247 The Perfect Stall 裸的二分匹配,但可以用最大流来水一下
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16396 Accepted: 750 ...
- poj 1274 The Perfect Stall【匈牙利算法模板题】
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20874 Accepted: 942 ...
- USACO Section 4.2 The Perfect Stall(二分图匹配)
二分图的最大匹配.我是用最大流求解.加个源点s和汇点t:s和每只cow.每个stall和t 连一条容量为1有向边,每只cow和stall(that the cow is willing to prod ...
随机推荐
- 那什么时候会触发BFC呢?块级格式化上下文
<html>根元素: float的值不为none: overflow的值为auto.scroll或hidden: display的值为table-cell.table-caption和in ...
- 高德JSAPI获取当前所在位置的经度纬度
这是在浏览器中的效果: 控制台打印出来的就是经度纬度的值 代码如下: <!doctype html> <html> <head> <meta charset= ...
- 【JS】Javascript数组操作
1.提取数组中每个对象的某个属性组成新的数组 如数组为: let arry = [ { name: 'zhao', 'age': 18 }, { name: 'qian', 'age': 19 }, ...
- C#基于websocket-sharp实现简易httpserver(封装)
一.背景 其实就是很简单的,公司会桌面开发的人员紧缺啊,项目又赶,而我们公司的前端人员人多还厉害(ps:吐槽下,后端的人真的少啊,会桌面开发的更少啊),所以萌生出了使用html+js来构建本地应用程序 ...
- SQL优化(面试题)
因为现在面试经常需要问的需要SQL优化,问的具体操作步骤时候的常见做法,所以网上总结这些操作步骤: SQL优化的具体操作: 1.在表中建立索引,优先考虑where.group by使用到的字段. 2. ...
- iOS开发之将字典、数组转为JSON字符串方法
//将字典转换成json格式字符串,不含\n这些符号 + (NSString *)gs_jsonStringCompactFormatForDictionary:(NSDictionary *)dic ...
- js 利用canvas + flv.js实现视频流 截屏 、本地下载功能实现,兼容火狐,谷歌;canvas截屏跨域问题,无音频视频流加载不显示问题
项目:物联网监控项目----后台视频流管理(前端实现视频截屏功能) 本文就不同视频源分情况展示: 1 本地视频(项目同目录视频)截屏(canvas.getContext("2d).drawI ...
- jq实现多选反选
<script type="text/javascript"> $('input [name="ckball"]').click(functi ...
- 【JavaScript】$.extend使用心得及源码研究
最近写多了js的面向对象编程,用$.extend写继承写得很顺手.但是在使用过程中发现有几个问题. 1.深拷贝 $.extend默认是浅拷贝,这意味着在继承复杂对象时,对象中内嵌的对象无法被拷贝到. ...
- 022 Jquery总结
1.大纲 jQuery 库中的 $() 是什么? 网页上有 5 个div元素,如何使用 jQuery来选择它们? jQuery 里的 ID 选择器和 class 选择器有何不同? 如何在点击一个按钮时 ...