POJ.3281 dining
最大流+拆点
思路清晰为啥一直WA呢

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstdio>
#define maxn 400
#define INF 0x3f3f3f3f
using namespace std;
int n,m,F,D,ss,tt;
vector <int> cow_f[maxn],cow_d[maxn];
vector <int> G[maxn];struct edge{int from,to,flow,cap;
};vector <edge> edges;
int cur[maxn],d[maxn],vist[maxn];void addedge(int from,int to,int cap){edges.push_back((edge){from,to,0,cap});edges.push_back((edge){to,from,0,0});int m=edges.size();G[from].push_back(m-2);G[to].push_back(m-1);
}void init(){edges.clear();for (int i=1;i<=maxn;i++){cow_d[i].clear();cow_f[i].clear();}for (int i=1;i<=maxn;i++) G[i]. clear();
}//int s=ss,t=tt;bool BFS(){memset(vist,0,sizeof(vist));queue <int> Q;Q.push(ss);vist[ss]=1;d[ss]=0;while (!Q.empty()){int x=Q.front();Q.pop();for(int i=0;i<G[x].size();i++) {edge &e=edges[G[x][i]];if (!vist[e.to] && e.cap>e.flow){vist[e.to]=1;d[e.to]=d[x]+1;Q.push(e.to);} }}    return vist[tt];
}int dfs(int x,int a){if (x == tt || a == 0) return a;int flow=0,f;for (int &i=cur[x];i<G[x].size();i++){edge &e=edges[G[x][i]];if (d[e.to]==d[x]+1 && (f=(dfs(e.to,min(a,(e.cap-e.flow)))))>0){e.flow+=f;edges[G[x][i]^1].flow-=f;flow+=f;a-=f;if (a == 0) break;}}return flow;
}int maxflow(int ss,int tt){
//  this->s=s; this->t=t;int flow=0;while (BFS()){memset(cur,0,sizeof(cur));flow+=dfs(ss,INF);}return flow;
}void read(){cin >> n >> F  >> D;int m=0;init();for (int i=1;i<=n;i++) {int fi,di;cin >> fi >> di;m+=fi+di;for (int j=1;j<=fi;j++) {int ff;cin >> ff;cow_f[i].push_back(ff);}for (int j=1;j<=di;j++) {int dd;cin >> dd;cow_d[i].push_back(dd);}}
}void build(){ss=n*2+D+F+1;tt=ss+1;for (int i=1;i<=n;i++) addedge(i,i+n,1);for (int i=1;i<=F;i++) addedge(ss,n*2+i,1);for (int i=1;i<=D;i++) addedge(n*2+D+i,tt,1);for (int i=1;i<=n;i++){for (int j=0;j<cow_f[i].size();j++) addedge(n*2+cow_f[i][j],i,1);for (int j=0;j<cow_d[i].size();j++) addedge(i+n,n*2+F+cow_d[i][j],1);}}
void ddebug(){for (int i=0;i<edges.size();i++) cout << edges[i].from <<" "<< edges[i].to <<" "<< edges[i].cap << endl;}
int main (){//freopen("dining.in","r",stdin);//freopen("dining.out","w",stdout);//cin >> m >> n;//2*n+F+D+2read();build();//
//  ddebug();int ans=maxflow(ss,tt);cout << ans;
}

POJ.3281 dining 最大流+拆点相关推荐

  1. POJ - 3281 Dining(最大流+思维建边)

    题目链接:点击查看 题目大意:给出n头奶牛,f种食物,d种饮料,每只奶牛可以选择数种食物和饮料,但每种食物和饮料只有一份,现在问最多能让多少头奶牛同时满足食物和饮料的条件 题目分析:最大流的题目,不过 ...

  2. poj 3281 Dining 最大流

    题目链接 一开始的想法就是food-cow-water,但是wa了,看了别人的思路知道每一只牛牛用一条边隔开,然后就达到了限流的效果. 所以 食物-->牛牛---->牛牛---->w ...

  3. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)

    B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...

  4. POJ 3281 -- Dining(最大流,拆点建图)

    题目链接 Description Cows are such finicky eaters. Each cow has a preference for certain foods and drink ...

  5. POJ 3281 (最大流+匹配+拆点)

    题目链接:http://poj.org/problem?id=3281 题目大意:有一些牛,一堆食物,一堆饮料.一头牛要吃一份食物喝一份饮料才算满足,而且牛对某些食物和饮料才有好感,问最多有多少头牛是 ...

  6. B - Dining POJ - 3281 -网络流拆点模板

    B - Dining POJ - 3281 题意:一些牛,每只牛有 一些  想吃的food and milk,然后问最大能够满足多少只牛. 满足是指的这头牛即能吃到他喜欢吃的又能喝到他喜欢喝的 思路: ...

  7. Dining(网络流,拆点, 最大流,详细注释)

    题目 POJ - 3281 题意 n只牛,f种食物,d种食物,每只牛都有喜欢的食物和饮料,每头牛都有各自喜欢的食物和饮料,每种食物或饮料只能分配给一头牛.问最多能有多少头牛可以同时得到喜欢的食物和饮料 ...

  8. Poj 3281 Regional Chengdu Food(Dicnic)

    网络流最大流的优化算法Dicnic,每一步对原图进行分层,然后用DFS求增广路.时间复杂度是O(n^2*m) . Poj 3281 和 9.16号成都regional网络赛food那道题,都是很好的模 ...

  9. 【POJ - 3281】Dining(拆点建图,网络流最大流)

    题干: Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she wi ...

最新文章

  1. Python 切片的简单讲解
  2. Java基础 -- 复用类(组合和继承)
  3. 装配图中齿轮的画法_装配图的规定画法 和特殊画法
  4. Linux常用命令汇总及使用方法(二)之文本编辑器VI
  5. 乐刻发布新品牌LITTA 目前已拥有25万+线上付费用户
  6. python提取excel数据视频_Python-爬取b站的热门视频并导入Excel中
  7. 微课|中学生可以这样学Python(1.5节):标准库与扩展库对象的导入
  8. 开发小程序遇协同、平台兼容难题,该如何破局?
  9. Material Design学习之 Dialog(顺便把前两天AppBarLayout没讲的部分提一提)
  10. mysql查询时去除重复数据以及 FOUND_ROWS 统计记录函数
  11. 搭建一个简单的Pascal脚本开发环境
  12. MAC如何烧录img文件或ios文件
  13. Canoe-14229-UDS自动化测试脚本CAPL 这适用于CANoe无diva的测试脚本
  14. 苹果手机连wifi很慢-解决方案
  15. 群体智能算法:细菌觅食算法
  16. php英文验证码,php 中英文验证码程序
  17. 奇异值分解的物理意义
  18. Android N 截图曝光,手机也能同屏多任务了!
  19. 常见的Http状态码以及其代表的意义
  20. Java删除StringBuilder最后一个逗号

热门文章

  1. 面试到了“IT大佬”,怼得我哑口无言…
  2. ios 高德挪动地图获取经纬度_IOS 地图移动中心点获取
  3. 华为在俄罗斯开设基于ARM技术的数据中心:技术之外,环境使然?
  4. y7000电池固件_y7000怎么刷电池固件|Surface Pro 3固件更新:电池续航问题终解决
  5. 韩国5G产品定价及营销策略剖析
  6. oracle 误删数据恢复
  7. 清华大学《大数据实践课》总结交流会成功举行
  8. 和平精英服务器维护多少钱,和平精英因充钱太多服务器崩溃?王小歪充52W,只用一小时...
  9. python自动汇总表格_用Python自动生成Excel报表
  10. pycharm中创建的dictionary与python package的区别