BZOJ 1711 网络流】的更多相关文章

思路: 神建图 源->饮料 边权为1 牛拆点 两个点之间的边权为1 饮料->左牛 边权为1 右牛->食品 边权为1 食品->汇边权为1 //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=4444,M=666666; int n,f,d,jyx…
1711: [Usaco2007 Open]Dining吃饭 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 902  Solved: 476[Submit][Status][Discuss] Description 农夫JOHN为牛们做了很好的食品,但是牛吃饭很挑食. 每一头牛只喜欢吃一些食品和饮料而别的一概不吃.虽然他不一定能把所有牛喂饱,他还是想让尽可能多的牛吃到他们喜欢的食品和饮料. 农夫JOHN做了F (1 <= F <= 100) 种食品…
最大流. 这东西好像叫三分图匹配. 源点向每个食物点连一条容量为1的边. 每个饮料点向汇点连一条容量为1的边. 将每个牛点拆点,食物点向喜欢它的牛的入点连一条容量为1的边,牛的出点向它喜欢的饮料点连一条容量为1的边. 最大流即为答案,每头牛拆点是为了保证每头牛只有一种食物和一种饮料. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<qu…
将牛拆成两个点 i 和 i' 并连弧 , S 向每种 food 连边 , 每种 drink 向 T 连边 , 每种 food 向喜欢他的 cow 连边 到 i , 每种 drink 从喜欢它的 cow i' 连边 , 全部容量均为 1 , answer = maxflow -------------------------------------------------------------------------------- #include<cstdio> #include<al…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1711 [题目大意] 每头牛都有一些喜欢的饮料和食物, 现在有一些食物和饮料,但是每样只有一份, 现在要求得到最多的牛使得都可以获得一份喜欢的饮料和一份喜欢的食物 [题解] 为了避免一份牛占用过多的资源,我们对牛进行拆点,增加边作为限制, 然后源点连接食物,汇点连接饮料,求最大流即可. [代码] #include <cstdio> #include <algorithm>…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1711 食物一列,牛拆点,饮料一列. 代码如下: #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; ,xm=6e4+,inf=1e9; ,nxt[xm],to[xm],c[xm],dis[xn],cur[xn]; queu…
题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享用到自己喜欢的食物和饮料.(1 <= f <= 100, 1 <= d <= 100, 1 <= n <= 100) (酒店之王)XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该…
题意是啥--. 思路: 不是与1或n连起来的边 边权是1 否则是inf 跑网络流 //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=66666,inf=0x3f3f3f3f; queue<int>q; int n,num,yy,ans,jy,w[N],v…
求完网络流以后 tarjan一发 判一判 //By SiriusRen #include <queue> #include <bitset> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 122222 int n,m,s,t; struct Node{int x,y,w,r;}node[N]; struct Dini…
题面 传送门 分析 考虑网络流 注意到数据包走的是最短路,所以我们只需要考虑在最短路上的边 由于最短路可能有多条,我们先跑一遍Dijkstra,然后再\(O(m)\) 遍历每条边(u,v,w) 如果dist[u]=dist[v]+w,则这条边肯定在最短路上 然后点的容量限制可以用拆点来解(常见套路),从u向u+n连边,容量为c[u] 原图中的边(u,v)在新图中变成边(u+n,v) 然后Dinic求最大流即可 代码 #include<iostream> #include<cstdio&g…