【bzoj3698】【XWW的难题】【有上下界的网络流】
Description
XWW是个影响力很大的人,他有很多的追随者。这些追随者都想要加入XWW教成为XWW的教徒。但是这并不容易,需要通过XWW的考核。
XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵A,满足XWW性。
称一个N*N的矩阵满足XWW性当且仅当:(1)A[N][N]=0;(2)矩阵中每行的最后一个元素等于该行前N-1个数的和;(3)矩阵中每列的最后一个元素等于该列前N-1个数的和。
现在你要给A中的数进行取整操作(可以是上取整或者下取整),使得最后的A矩阵仍然满足XWW性。同时XWW还要求A中的元素之和尽量大。
Input
第一行一个整数N,N ≤ 100。
接下来N行每行包含N个绝对值小于等于1000的实数,最多一位小数。
Output
输出一行,即取整后A矩阵的元素之和的最大值。无解输出No。
Sample Input
3.1 6.8 7.3 17.2
9.6 2.4 0.7 12.7
3.6 1.2 6.5 11.3
16.3 10.4 14.5 0
Sample Output
HINT
【数据规模与约定】
有10组数据,n的大小分别为10,20,30...100。
【样例说明】
样例中取整后满足XWW性的和最大的矩阵为:
3 7 8 18
10 3 0 13
4 1 7 12
17 11 15 0
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 300
#define M 40000
#define inf 210000000
using namespace std;
int point[N],next[M<<1],n,m,sum,s,t,S,T,cnt=1;
int pre[N],gap[N],dis[N],d[N],cur[N];
double a[N][N];
struct use{int st,en,v;
}e[M<<1];
void add(int x,int y,int v){next[++cnt]=point[x];point[x]=cnt;e[cnt].st=x;e[cnt].en=y;e[cnt].v=v;next[++cnt]=point[y];point[y]=cnt;e[cnt].st=y;e[cnt].en=x;e[cnt].v=0;
}
int isap(int ss,int tt){int mn,u=ss,i,ans(0);gap[0]=tt;for (int i=1;i<=tt;i++) gap[i]=0;for (int i=1;i<=tt;i++) dis[i]=0;for (int i=1;i<=tt;i++) cur[i]=point[i];while (dis[ss]<tt){bool f=false;for (i=cur[u];i;i=next[i]) if (e[i].v&&dis[e[i].en]+1==dis[u]){f=true;cur[u]=i;break;}if (f){pre[u=e[i].en]=i;if (u==tt){ mn=inf;for (int i=tt;i!=ss;i=e[pre[i]].st) mn=min(mn,e[pre[i]].v);ans+=mn;for (int i=tt;i!=ss;i=e[pre[i]].st) e[pre[i]].v-=mn,e[pre[i]^1].v+=mn;u=ss;}}else{gap[dis[u]]--;if (!gap[dis[u]]) return ans;for (mn=tt,i=point[u];i;i=next[i]) if (e[i].v) mn=min(mn,dis[e[i].en]);gap[dis[u]=mn+1]++;cur[u]=point[u];if (u!=ss) u=e[pre[u]].st;}}return ans;
}
void build(){add(t,s,inf);for (int i=1;i<n;i++){if (a[i][n]!=(int)a[i][n]) add(s,i,1);d[s]-=(int)a[i][n];d[i]+=(int)a[i][n];}for (int i=1;i<n;i++){if (a[n][i]!=(int)a[n][i])add(i+n,t,1);d[t]+=(int)a[n][i];d[i+n]-=(int)a[n][i];} for (int i=1;i<n;i++)for (int j=1;j<n;j++){if (a[i][j]!=(int)a[i][j]) add(i,j+n,1);d[i]-=(int)a[i][j];d[j+n]+=(int)a[i][j];}for (int i=1;i<=t;i++)if (d[i]>0) add(S,i,d[i]),sum+=d[i];else if (d[i]<0) add(i,T,-d[i]);
}
int main(){//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);scanf("%d",&n);for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)scanf("%lf",&a[i][j]);s=2*n+1,t=s+1;S=t+1;T=S+1;build();if (isap(S,T)!=sum){printf("No\n");return 0;};printf("%d\n",isap(s,t)*3);
}
【bzoj3698】【XWW的难题】【有上下界的网络流】相关推荐
- bzoj3698: XWW的难题 有上下界的网络流
bzoj3698: XWW的难题 Description XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出 ...
- [bzoj3698]XWW的难题——有上下界的最大流
题目大意: XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩 ...
- BZOJ3698 XWW的难题(上下界网络流+gap优化的细节处理)
XWW给你一个N*N的正实数矩阵A,满足XWW性. 称一个N*N的矩阵满足XWW性当且仅当:(1)A[N][N]=0:(2)矩阵中每行的最后一个元素等于该行前N-1个数的和:(3)矩阵中每列的最后一个 ...
- BZOJ 3698: XWW的难题|有上下界的网络流之最大流
先构建可行流的模型 s−>s->每一行 流量为(a[i][n],a[i][n]+1)(a[i][n],a[i][n]+1) 每一列−>t->t 流量为(a[n][i],a[n] ...
- 【BZOJ3698】XWW的难题 有上下界的最大流
[BZOJ3698]XWW的难题 Description XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出 ...
- 【bzoj3698】XWW的难题 有上下界最大流
题目描述 XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵 ...
- 自己对有上下界的网络流的理解
首先说一下,什么是上下流,上下流也就是有上下界的网络流,正常的网络流都是只有上界,没有下界,但是当有下界限制的时候就可能出现因不能满足所有下界而无解的情况,这种问题一般分为三种问法,有源/无源可行流判 ...
- 有上下界的网络流1-无源汇带上下界网络流SGU194
有上下界的网络流1-无源汇带上下界网络流SGU194 今天开始啃网络流了.对于求解无源汇带上下界的网络流,我们可以这样建图: 建图模型: 以前写的最大流默认的下界为0,而这里的下界却 ...
- [bzoj3698]XWW的难题 有源汇的上下界最大流
3698: XWW的难题 Time Limit: 10 Sec Memory Limit: 128 MB [Submit][Status][Discuss] Description XWW是个影响力 ...
最新文章
- Eclipse中10个最有用的快捷键组合
- spyder上怎样将figure框出来_怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?...
- 张钹、朱松纯、黄铁军等同台激辩:人工智能的“能”与“不能”
- python2安装pyyaml_Python3安装Pyyaml
- PostgreSQL学习笔记4之常用数据类型
- 顶级技术大咖,揭秘实时音视频开发的超级风口
- “大胃王”吃播注意了 国家明确禁止发布量大多吃、暴饮暴食等节目
- Java开发笔记(一百四十三)FXML布局的基本格式
- 使用VSCode玩转Java (二)
- vue 非父子组件传值
- 联想G480笔记本安装系统
- 第三章:SCI论文写作经验分享
- 存储过程实现报表数据源的利弊分析
- spring cache annotation(二)
- 电流感应放大器应用技术要点
- 计算机标签高低温标准,液晶显示屏高温高湿测试判断标准
- 利用conda安装包、卸载包、升级包、查看包信息等操作
- 清华大学宪法与行政法学学术硕士考研经验分享
- 鲍尔默离开后,微软还能东山再起吗?
- UEFI调试网络启动-WINDOWS搭建PXE服务器