Cogs 329. K- 联赛(最大流)
- K- 联赛
★★★ 输入文件:kleague.in 输出文件:kleague.out 简单对比
时间限制:1 s 内存限制:32 MB
【问题描述】
K- 联赛职业足球俱乐部的球迷们都是有组织的训练有素的啦啦队员,就像红魔啦啦队一样 (2002 年韩日世界杯上韩国队的啦啦队 ) 。这个赛季,经过很多场比赛以后,球迷们希望知道他们支持的球队是否还有机会赢得最后的联赛冠军。换句话说,球队是否可以通过某种特定的比赛结果最终取得最高的积分 ( 获胜场次最多 ) 。 ( 允许出现多支队并列第一的情况。 )
现在,给出每个队的胜负场数, w i 和 d j ,分别表示 team i 的胜场和负场 (1 ≤ i ≤ n) 。还给出 a i,j ,表示 team i 和 team j 之间还剩多少场比赛要进行 (1 ≤ i , j ≤ n) 。这里, n 表示参加联赛的队数,所有的队分别用 l , 2 ,…, n 来编号。你的任务是找出所有还有可能获得冠军的球队。
所有队参加的比赛数是相同的,并且为了简化问题,你可以认为不存在平局 ( 比赛结果只有胜或负两种 ) 。
【输入】
第一行一个整数 n (1 ≤ n ≤ 25) ,表示联赛中的队数。
第二行 2n 个数, w 1 , d 1 , w 2 , d 2 ,…, w n , d n ,所有的数都不超过 100 。
第三行 n^2 个数, a 1,1 , a 1,2 ,…, a 1,n , a 2,1 , a 2,2 , …, a 2,n ,…, a n,1 , a n,2 ,…, a n,m , 所有的数都不超过 10 。 a i,j =a j,i ,如果 i=j ,则 a i,j =0 。
【输出】
仅一行,输出所有可能获得冠军的球队,按其编号升序输出,中间用空格分隔。
【样例 1】
kleague.in
3
2 0 1 1 0 2
0 2 2 2 0 2 2 2 0
kleague.out
1 2 3
【样例 2】
kleague.in
3
4 0 2 2 0 4
0 1 1 1 0 1 1 1 0
kleague.out
1 2
【样例 3 】
kleague.in
4
0 3 3 1 1 3 3 0
0 0 0 2 0 0 1 0 0 1 0 0 2 0 0 0
kleague.out
2 4
/*
最大流.
可行流判定.
我们只关心胜利的次数.
如果看清数据范围的话,就往这方面想了orz.
对于每个点都做一次判定.
搞一个二分图,左边是团队,右边是比赛.
这样的话我们去判定一个是否可行的时候
如果存在x可以夺冠的局面,那么它必然存在剩下的比赛
全部胜利且获得总分最高的局面.
我们让判定的那个团队的剩余比赛都胜利的情况下,
给每个团队分配最多tot+w[x]-w[i]的流量.
让比赛分配胜利次数看是否能跑出可行流.
最后看看是否满流.
*/
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define MAXN 2001
#define INF 1e9
using namespace std;
int n,m,ans,tot,cnt,total,cut,S,T,head[MAXN],dis[MAXN],w[MAXN],c[MAXN][MAXN];
struct edge{int v,next,c;}e[MAXN*3];
queue<int>q;
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
    return x*f;
}
void add(int u,int v,int c)
{
    e[++cut].v=v;e[cut].c=c;e[cut].next=head[u];head[u]=cut;
    e[++cut].v=u;e[cut].c=0;e[cut].next=head[v];head[v]=cut;
}
bool bfs()
{
    q.push(S);
    for(int i=S;i<=T;i++) dis[i]=-1;dis[S]=0;
    while(!q.empty())
    {
        int u=q.front();q.pop();
        for(int i=head[u];i;i=e[i].next)
        {
            if(dis[e[i].v]==-1&&e[i].c)
            {
                dis[e[i].v]=dis[u]+1;
                q.push(e[i].v);
            }
        }
     }
    return dis[T]!=-1;
}
int dfs(int u,int y)
{
    if(u==T) return y;
    int rest=0;
    for(int i=head[u];i&&rest<y;i=e[i].next)
    {
        if(dis[e[i].v]==dis[u]+1&&e[i].c)
        {
            int x=dfs(e[i].v,min(y-rest,e[i].c));
            rest+=x;
            e[i].c-=x;
            e[i^1].c+=x;
        }
    }
    if(!rest) dis[u]=-1;
    return rest;
}
void dinic()
{
    while(bfs()) ans+=dfs(S,INF);
    return ;
}
void Clear()
{
    memset(head,0,sizeof head);
    cut=1;tot=ans=0,cnt=0;
}
bool check(int x)
{
    Clear();S=0,T=n+n*n+1;
    for(int i=1;i<=n;i++) tot+=c[x][i];
    for(int i=1;i<=n;i++) if(w[i]>tot+w[x]) return false;
    for(int i=1;i<=n;i++)
    {
        if(i==x) continue;
        add(S,i,tot+w[x]-w[i]);
    }
    for(int i=1;i<=n;i++)
    {
        if(i==x) continue;
        for(int j=1;j<=i-1;j++)
         {
            if(i==j||j==x||!c[i][j]) continue;
            cnt++;
            add(i,n+cnt,INF);
            add(j,n+cnt,INF);
            add(n+cnt,T,c[i][j]);
        }
    }
    dinic();
    for(int i=head[T];i;i=e[i].next)
      if(e[i^1].c) return false;
    //if(ans==total-w[x]) return true;
    return true;
}
int main()
{
    freopen("kleague.in","r",stdin);
    freopen("kleague.out","w",stdout);
    int x,hhh;
    n=read();
    for(int i=1;i<=n;i++) w[i]=read(),hhh=read();
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        c[i][j]=read(),total+=c[i][j];
    for(int i=1;i<=n;i++) if(check(i)) printf("%d ",i);
    return 0;
}Cogs 329. K- 联赛(最大流)的更多相关文章
- 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 ... 
- 数据结构(主席树):COGS 2213. K个串
		2213. K个串 ★★★★ 输入文件:bzoj_4504.in 输出文件:bzoj_4504.out 简单对比时间限制:20 s 内存限制:512 MB [题目描述] 兔子们在玩k个 ... 
- Cogs 13. 运输问题4(费用流)
		运输问题4 ★★☆ 输入文件:maxflowd.in 输出文件:maxflowd.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 一个工厂每天生产若干商品,需运输到销售部门进 ... 
- 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 ... 
随机推荐
- go 数据渲染到html页面 02
			渲染到浏览器页面 //把数据渲染到浏览器 package main import ( "fmt" "text/template" "net/http& ... 
- 十分钟快速创建 Spring Cloud 项目
			一般来说,Intelij IDEA 可以通过 Maven Archetype 来快速生成Maven项目,其实 IDEA 集成了 Spring 官方提供的 Spring Initializr,可以非常方 ... 
- 在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数、存储过程内的参数)
			原文:在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数.存储过程内的参数) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的 ... 
- Centos6 Connect WiFi
			Centos6 Connect WiFi // 安装 wireless tools yum install wireless-tools dkms pciutils lsusb // 使用wlan命令 ... 
- 使用js解决response.sendRedirect("...")重定向URL之后出现跨域问题
			背景: 本系统与门户系统单点登录时候,需要重定向到门户系统的登录页面,可是如果长时间没有操作的话,session会话失效,就需要跳转到登录页面. 所以在使用 response.sendRedirect ... 
- RFC destination fails with error Incomplete Logon Data after system copy
			1. 问题现象 1.1在system copy后,提示RFC报错Unable to configure STMS 2. 重要的参考文件: 2.1RFC passwords not available ... 
- Qt QPushButton 背景色
			正常状态:黑底(背景色),白字(前景色),圆角,向外凸起 鼠标停留:背景和前景反色 鼠标按下:背景色变为淡蓝色,向内凹陷 ui->pushButton->setStyleSheet(&qu ... 
- sql 四舍五入 保留两位小数
			一.问题描述 数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字. 二.sqlserver解决方案: 1. 使用 Round() 函 ... 
- ubuntu18.04安装wine
			wine是一个兼容层,可以从多平台(linux,macos,等)运行windows应用. Wine (Wine Is Not an Emulator)[即Wine不是一个模拟器]是一个在Linux和U ... 
- DNS服务——正向查找区 和 逆向查找区
			前言 正向查找区,就是我们最熟知的DNS.即根据域名解析成IP 逆向查找区,即根据IP解析成域名. 他们之间的关系很像ARP和RARP 正向查找区 /etc/named.rfc1912.zones用于 ... 
