国家集训队2011 happiness
【试题来源】
【问题描述】
【输入格式】
接下来是六个矩阵
第一个矩阵为n行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学选择文科获得的喜悦值。
第二个矩阵为n行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学选择理科获得的喜悦值。
第三个矩阵为n-1行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i+1行第j列的同学同时选择文科获得的额外喜悦值。
第四个矩阵为n-1行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i+1行第j列的同学同时选择理科获得的额外喜悦值。
第五个矩阵为n行m-1列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i行第j+1列的同学同时选择文科获得的额外喜悦值。
第六个矩阵为n行m-1列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i行第j+1列的同学同时选择理科获得的额外喜悦值。
【输出格式】
【样例输入】
1 1
100 110
1
1000
【样例输出】
【样例说明】
【数据规模和约定】
对于30%以内的数据,n,m<=8
对于100%以内的数据,n,m<=100 数据保证答案在2^30以内
对于100%的数据,时间限制为0.5s。
据图当 1.i 文 j 理 2.i,j同文 3.i理 j文 4.i,j同理四种情况时,把边割掉,用 总的-割的 就是答案
2.当多个点时也一样,S-i / i-T 都是i周围的 (同文+同理)/2 i-j都是 (同文+同理)(i,j的)/2
注意:
1.一开始先乘2,最后再/2,就不用double了
2.数组开10005/105 不要开10001/101
3.连的时候不要重复
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 //#define dd double 5 #define mem(a,b) memset(a,b,sizeof(a)) 6 using namespace std; 7 const int N=105; 8 const int INF=(1<<31)-1; 9 inline int minn(int a,int b){return a<b?a:b;} 10 struct son 11 { 12 int v,next,u; 13 int w; 14 }; 15 son a1[1000001]; 16 int first[1000001],e; 17 inline void addbian(int u,int v,int w) 18 { 19 a1[e].u=u; 20 a1[e].v=v; 21 a1[e].w=w; 22 a1[e].next=first[u]; 23 first[u]=e++; 24 } 25 26 int dui[10000001],he,en; 27 inline void clear(){he=1;en=0;} 28 inline void push(int x){dui[++en]=x;} 29 inline int top(){return dui[he];} 30 inline void pop(){++he;} 31 inline bool empty(){return en>=he?0:1;} 32 33 int n,m,S,T; 34 int sum; 35 int wen[N][N],li[N][N]; 36 int xiawen[N][N],xiali[N][N]; 37 int youwen[N][N],youli[N][N]; 38 39 int ha[N][N]; 40 int wensum[10005],lisum[10005]; 41 42 int dep[10005]; 43 44 int bfs() 45 { 46 mem(dep,0);clear(); 47 dep[S]=1;push(S); 48 while(!empty()) 49 { 50 int now=top();pop(); 51 for(int i=first[now];i!=-1;i=a1[i].next) 52 { 53 int temp=a1[i].v; 54 if(!a1[i].w||dep[temp])continue; 55 dep[temp]=dep[now]+1; 56 push(temp); 57 if(temp==T)return 1; 58 } 59 } 60 return 0; 61 } 62 63 int dfs(int x,int val) 64 { 65 if(x==T)return val; 66 int val2=val,k; 67 for(int i=first[x];i!=-1;i=a1[i].next) 68 { 69 int temp=a1[i].v; 70 if(dep[temp]!=dep[x]+1||!val2||!a1[i].w)continue; 71 k=dfs(temp,minn(val2,a1[i].w)); 72 if(!k){dep[temp]=0;continue;} 73 a1[i].w-=k;a1[i^1].w+=k;val2-=k; 74 } 75 return val-val2; 76 } 77 78 int Dinic() 79 { 80 int ans=0; 81 while(bfs()) 82 ans+=dfs(S,INF); 83 return ans; 84 } 85 86 int main(){ 87 //freopen("nt2011_happiness.in","r",stdin); 88 //freopen("nt2011_happiness.out","w",stdout); 89 //freopen("1.txt","r",stdin); 90 mem(first,-1); 91 scanf("%d%d",&n,&m); 92 S=0;T=n*m+1; 93 for(int i=1;i<=n;++i) 94 for(int j=1;j<=m;++j) 95 {ha[i][j]=(i-1)*m+j;} 96 97 for(int i=1;i<=n;++i) 98 for(int j=1;j<=m;++j) 99 {scanf("%d",&wen[i][j]);wen[i][j]*=2;sum+=wen[i][j];} 100 for(int i=1;i<=n;++i) 101 for(int j=1;j<=m;++j) 102 {scanf("%d",&li[i][j]);li[i][j]*=2;sum+=li[i][j];} 103 104 for(int i=1;i<n;++i) 105 for(int j=1;j<=m;++j) 106 {scanf("%d",&xiawen[i][j]);xiawen[i][j]*=2;sum+=xiawen[i][j];} 107 for(int i=1;i<n;++i) 108 for(int j=1;j<=m;++j) 109 {scanf("%d",&xiali[i][j]);xiali[i][j]*=2;sum+=xiali[i][j];} 110 111 for(int i=1;i<=n;++i) 112 for(int j=1;j<m;++j) 113 {scanf("%d",&youwen[i][j]);youwen[i][j]*=2;sum+=youwen[i][j];} 114 for(int i=1;i<=n;++i) 115 for(int j=1;j<m;++j) 116 {scanf("%d",&youli[i][j]);youli[i][j]*=2;sum+=youli[i][j];} 117 // 118 for(int i=1;i<=n;++i) 119 for(int j=1;j<=m;++j) 120 { 121 wensum[ha[i][j]]=wen[i][j]+((i>1?xiawen[i-1][j]:0)+(i<n?xiawen[i][j]:0)+(j>1?youwen[i][j-1]:0)+(j<m?youwen[i][j]:0))/2; 122 lisum[ha[i][j]]=li[i][j]+((i>1?xiali[i-1][j]:0)+(i<n?xiali[i][j]:0)+(j>1?youli[i][j-1]:0)+(j<m?youli[i][j]:0))/2; 123 } 124 125 for(int i=1;i<T;++i) 126 {addbian(S,i,wensum[i]);addbian(i,S,0);} 127 for(int i=1;i<T;++i) 128 {addbian(i,T,lisum[i]);addbian(T,i,0);} 129 130 for(int i=1;i<=n;++i) 131 for(int j=1;j<=m;++j) 132 { 133 /*if(i>1) 134 { 135 addbian(ha[i][j],ha[i-1][j],(xiawen[i-1][j]+xiali[i-1][j])/2); 136 addbian(ha[i-1][j],ha[i][j],(xiawen[i-1][j]+xiali[i-1][j])/2); 137 }*/ 138 if(i<n) 139 { 140 addbian(ha[i][j],ha[i+1][j],(xiawen[i][j]+xiali[i][j])/2); 141 addbian(ha[i+1][j],ha[i][j],(xiawen[i][j]+xiali[i][j])/2); 142 } 143 /*if(j>1) 144 { 145 addbian(ha[i][j],ha[i][j-1],(youwen[i][j-1]+youli[i][j-1])/2); 146 addbian(ha[i][j-1],ha[i][j],(youwen[i][j-1]+youli[i][j-1])/2); 147 }*/ 148 if(j<m) 149 { 150 addbian(ha[i][j],ha[i][j+1],(youwen[i][j]+youli[i][j])/2); 151 addbian(ha[i][j+1],ha[i][j],(youwen[i][j]+youli[i][j])/2); 152 } 153 } 154 155 //printf("sum=%d\n",sum/2); 156 157 printf("%d",(sum-Dinic())/2); 158 //while(1); 159 return 0; 160 }
code
转载于:https://www.cnblogs.com/A-LEAF/p/7257650.html
国家集训队2011 happiness相关推荐
- 【COGS 1873】 [国家集训队2011]happiness(吴确) 最小割
这是一种最小割模型,就是对称三角,中间双向边,我们必须满足其最小割就是满足题目条件的互斥关系的最小舍弃,在这道题里面我们S表示文T表示理,中间一排点是每个人,每个人向两边连其选文或者选理的价值,中间每 ...
- happiness[国家集训队2011(吴确)]
[试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...
- [国家集训队2011]跳跳棋
P1852 [国家集训队]跳跳棋https://www.luogu.org/problemnew/show/P1852 Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不 ...
- 题解 【国家集训队2011】数颜色
题面 解析 这题也就是一个带修改的莫队啊啊!! 所以,我们只需要在普通莫队上加上一维时间即可. 怎么加呢? 只需要记录下每次修改和查询的时间, 在左右端点跳跃的同时,也将时间跳到询问的时间就行了. 具 ...
- 【国家集训队2011】【BZOJ2141】排队
Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的 ...
- bzoj2144 【国家集训队2011】跳跳棋
Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他 ...
- [国家集训队2011]稳定婚姻(无向图定向)
题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的姗姗和男友谈恋爱半年就结婚,结婚不到 ...
- [国家集训队2011]拆迁队nbsp;解题报告
题目: http://cogs.pro/cogs/problem/problem.php?pid=1859 lanxisi带领着他的拆迁队来整治一个街道.这个街道由N个旧房子组成,从左到右编号为1.. ...
- Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...
最新文章
- 博客园自定义页面风格设计 后续篇(页面设计模式及代码高亮 鼠标点击效果升级)...
- Asp.Net Web Api 2 实现多文件打包并下载文件示例源码
- jQuery自定义选择器
- SpringCloud Zuul(四)之工作原理
- nn.Conv2d(nc, ndf, 4, 2, 1, bias=False),nc、ndf是什么?
- java SSH编码规范
- python的zip函数_python的zip函数
- 各省简称 拼音 缩写_全国城市拼音 缩写
- flash 实例教程
- 5款好看的WordPress博客主题下载
- 【数电基础知识】各逻辑运算符号盘点
- python断言语句的语法_Python断言教程
- 人工智能现状和发展趋势
- 怎样从电脑传入视频到ipad 播放
- 督查督办管理系统在企业管理中起到的作用
- find:paths must precede expression问题及解决
- 织梦DedeCMS管理员动态密码登录插件下载
- 无法使用此产品的安装源,请确认安装源存在,并且您可以访问它
- CNN经典算法GoogleNet介绍(论文详细解读)
- 【TED】How to get better at the things you care about?