UVAlive2531 The K-League(最大流)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33451
【思路】
最大流。
大体思路是枚举每个队伍,最大流判断是否可能成为冠军。
构图:
1 建立ST,比赛(u,v)建立n^2个结点,队伍u建立n个结点。
2 由S向(u,v)连容量为a[u][v]的边,由(u,v)向u和v连容量为INF的边,由u向T连容量为total-w[u]的边。
3 如果从S发出的边都满载则该team可行。
【代码】
- #include<cstdio>
- #include<cstring>
- #include<queue>
- #include<vector>
- #define FOR(a,b,c) for(int a=(b);a<(c);a++)
- using namespace std;
- const int maxn = +;
- const int INF = 1e9;
- struct Edge{
- int u,v,cap,flow;
- };
- struct Dinic {
- int n,m,s,t;
- bool vis[maxn];
- int d[maxn],cur[maxn];
- vector<int> G[maxn];
- vector<Edge> es;
- void init(int n) {
- this->n=n;
- es.clear();
- for(int i=;i<n;i++) G[i].clear();
- }
- void AddEdge(int u,int v,int cap) {
- es.push_back((Edge){u,v,cap,});
- es.push_back((Edge){v,u,,});
- m=es.size();
- G[u].push_back(m-);
- G[v].push_back(m-);
- }
- bool BFS() {
- queue<int> q;
- memset(vis,,sizeof(vis));
- q.push(s); vis[s]=; d[s]=;
- while(!q.empty()) {
- int u=q.front(); q.pop();
- for(int i=;i<G[u].size();i++) {
- Edge& e=es[G[u][i]];
- int v=e.v;
- if(!vis[v] && e.cap>e.flow) {
- vis[v]=;
- d[v]=d[u]+;
- q.push(v);
- }
- }
- }
- return vis[t];
- }
- int DFS(int u,int a) {
- if(u==t || a==) return a;
- int flow=,f;
- for(int& i=cur[u];i<G[u].size();i++){
- Edge& e=es[G[u][i]];
- int v=e.v;
- if( d[v]==d[u]+ && (f=DFS(v,min(a,e.cap-e.flow)))> ) {
- e.flow+=f;
- es[G[u][i]^].flow-=f;
- flow+=f,a-=f;
- if(!a) break;
- }
- }
- return flow;
- }
- int Maxflow(int s,int t) {
- this->s=s , this->t=t;
- int flow=;
- while(BFS()) {
- memset(cur,,sizeof(cur));
- flow+=DFS(s,INF);
- }
- return flow;
- }
- } dc;
- int n;
- int w[maxn],d[maxn],a[maxn][maxn];
- int main() {
- int T;
- scanf("%d",&T);
- while(T--) {
- scanf("%d",&n);
- for(int i=;i<n;i++) scanf("%d%d",&w[i],&d[i]);
- int sum=;
- for(int i=;i<n;i++)
- for(int j=;j<n;j++) scanf("%d",&a[i][j]) , sum+=a[i][j];
- sum/=;
- int S=n*n+n , T=S+;
- bool first=;
- for(int team=;team<n;team++)
- {
- int total=w[team];
- for(int i=;i<n;i++) total+=a[team][i];
- bool flag=;
- for(int i=;i<n;i++) if(w[i]>total) flag=; //即使全胜依然不可能是冠军
- if(flag) continue;
- dc.init(n*n+n+);
- for(int i=;i<n;i++) {
- for(int j=i+;j<n;j++) {
- int r=i*n+j;
- if(a[i][j]) dc.AddEdge(S,r,a[i][j]);
- dc.AddEdge(r,n*n+i,INF) , dc.AddEdge(r,n*n+j,INF);
- }
- dc.AddEdge(n*n+i,T,total-w[i]);
- }
- if(dc.Maxflow(S,T)==sum) {
- if(first) first=; else putchar(' ');
- printf("%d",team+);
- }
- }
- putchar('\n');
- }
- return ;
- }
UVAlive2531 The K-League(最大流)的更多相关文章
- POJ - 2516 Minimum Cost 每次要跑K次费用流
传送门:poj.org/problem?id=2516 题意: 有m个仓库,n个买家,k个商品,每个仓库运送不同商品到不同买家的路费是不同的.问为了满足不同买家的订单的最小的花费. 思路: 设立一个源 ...
- poj-2516.minimum cost(k次费用流)
Minimum Cost Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 19883 Accepted: 7055 Des ...
- UVALive-2531 The K-League (最大流建模+枚举)
题目大意:有n支足球队,已知每支球队的已胜场数和任意两支球队之间还需要的比赛场数a[i][j],求最终可能夺冠的所有球队. 题目分析:枚举所有的球队,对于球队 i 让它在接下来的比赛中全部获胜,如果这 ...
- hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙
/** 题目:hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4106 ...
- 【wikioi】1034 家园(最大流+特殊的技巧)
http://wikioi.com/problem/1034/ 太神了这题. 其实一开始我以为是费用流,但是总感觉不对. 原因是我没看到一句话,特定的时刻到达特定的点!! 也就是说,并不是每艘船每次都 ...
- BZOJ 2324 营救皮卡丘(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2324 题意:n+1个城市(0到n).初始时K个 人都在0城市.城市之间有距离.要求(1) ...
- hdu3081 Marriage Match II(二分+并查集+最大流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意: n个女生与n个男生配对,每个女生只能配对某些男生,有些女生相互是朋友,每个女生也可以跟她 ...
- POJ 2516 Minimum Cost (费用流)
题面 Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his sale area ...
- 【费用流】【CODEVS】1227 方格取数2
[算法]最小费用最大流(费用流) [题解] 费用流:http://www.cnblogs.com/onioncyc/p/6496532.html 本题构图: 在有限的k次行走中尽可能多的拿到数字,明显 ...
随机推荐
- maven占位符
maven占位符默认是${} 也可以自己指定. pom.xml配置如下: <plugin> <groupId>org.apache.maven.plugins</grou ...
- 判断浏览器是否支持FileReader
1.js代码: //判断浏览器是否支持FileReader if (typeof FileReader == "undefined") { document.write(" ...
- PSD 转化成 HTML
一般情况下,网页设计制作完成的工作实际是:psd 效果图 转成 html+CSS 的模板页面,一般情况下,我们会拿到美工的 psd,不同的人会有不同的做法: 打开fireworks将图片切割导出为ht ...
- 24种设计模式--多例模式【Multition Pattern】
这种情况有没有?有!大点声,有没有?有,是,确实有,就出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的地盘,国号不同.大家还 记得那首诗<石灰吟>吗?作者是谁?于谦,他是被谁杀死的 ...
- in_array 判断问题的疑惑解决。
面试题中有一条是关于in_array判断的,题目如下: 如何大家没有深入了解in_array的类型判断过程,而是根据经验来选择,肯定很多人也是是选择了D答案的,具体的原因我也是从牛人的博客里面得到答案 ...
- Android 学习手札(一) 应用程序架构
1.资源列表 Android支持的资源列表 目 录 资源类型 描述 res/anim XML 该目录用于存放帧(frame).动画或补间(tweened)动画文件 res/drawable ...
- Oracle数据库之PL/SQL包
Oracle数据库之PL/SQL包 1. 简介 包(PACKAGE)是一种数据对象,它是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,作为一个完整的单元存储在数据库中,用名称来 ...
- 使用Thinkphp框架开发移动端接口
本文给大家分享的是使用thinkphp框架开发移动端接口的2种方法,一种是开发API,另外一种是实现移动端访问自动切换移动主题模板,从而实现伪app访问,下面我们就来详细看下如何实现吧. 方案一:给 ...
- App Store生存指南
资格获取 如果已经有App Store开发帐号请跳过此节. App Store的资格获取其实一直以来都不算难,和其它事情一样,需要的只是耐心.现在苹果对申请者的文书手续要求已经比几年前简化多了 ...
- C#,Java,C++中的finally关键字
博客原文:http://hankjin.blog.163.com/blog/static/33731937201031511305338/ 先说C++,标准C++不支持finally, 如果要实现fi ...