洛咕 P4474 王者之剑
宝石只能在偶数秒取到,假设有一个宝石在奇数秒取到了,那么上一秒是偶数秒,在上一秒的时候这里的宝石就没了。
相邻的两个宝石不能同时取,很显然,先取一块,那么这是偶数秒,取完了这一块之后相邻的都没了。
只要不取相邻两个宝石,一定能构造出一种合法的方案(为什么?看胡伯涛的论文
所以答案就是二分图最小点权覆盖
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return x*f;
}
int num[101][101],fir[10010],dep[10010],head[10010],dis[1000010],nxt[1000010],w[1000010],id=1,S,T;
il vd link(int a,int b,int c){nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=c;nxt[++id]=fir[b],fir[b]=id,dis[id]=a,w[id]=0;
}
il bool BFS(){memset(dep,0,sizeof dep);static int que[10010],hd,tl;hd=tl=0,que[tl++]=S;dep[S]=1;while(hd^tl){int x=que[hd++];for(int i=fir[x];i;i=nxt[i])if(w[i]&&!dep[dis[i]])dep[dis[i]]=dep[x]+1,que[tl++]=dis[i];}return dep[T];
}
il int Dinic(int x,int maxflow){if(x==T)return maxflow;int ret=0;for(int&i=head[x];i;i=nxt[i])if(w[i]&&dep[dis[i]]==dep[x]+1){int d=Dinic(dis[i],std::min(maxflow-ret,w[i]));w[i]-=d,w[i^1]+=d,ret+=d;if(ret==maxflow)break;}return ret;
}
int main(){
#ifndef ONLINE_JUDGEfreopen("4474.in","r",stdin);freopen("4474.out","w",stdout);
#endifint n=gi(),m=gi(),ans=0,W,cnt=0;S=++cnt,T=++cnt;for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){W=gi();ans+=W;num[i][j]=++cnt;if((i+j)&1)link(S,num[i][j],W);else link(num[i][j],T,W);}for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)if((i+j)&1){if(i<n)link(num[i][j],num[i+1][j],1e9);if(j<m)link(num[i][j],num[i][j+1],1e9);if(i>1)link(num[i][j],num[i-1][j],1e9);if(j>1)link(num[i][j],num[i][j-1],1e9);}while(BFS())memcpy(head,fir,sizeof head),ans-=Dinic(S,1e9);printf("%d\n",ans);return 0;
}
转载于:https://www.cnblogs.com/xzz_233/p/10123713.html
洛咕 P4474 王者之剑相关推荐
- (最小割)洛谷P4474 王者之剑
洛谷P4474 王者之剑 思路: 显然求二分图最大权独立点集. 把点进行黑白染色. SSS向白点建边,权值为vi,jv_{i,j}vi,j; 白点向周围的黑点建边,权值为infinfinf; 黑点向 ...
- 洛谷P4474 王者之剑(吾王的题目!!!)
蒟蒻第一次发题解,看官点个赞再走QwQ 题目链接 https://www.luogu.org/problem/P4474 题目描述 这是在阿尔托利亚·潘德拉贡成为英灵前的事情,她正要去拔出石中剑成为亚 ...
- 洛咕P3250 [HNOI2016]网络 整体二分
这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...
- P4474 王者之剑
P4474 王者之剑 题目大意 n*m的带权网格,任意选择起点 开始时刻为0秒.以下操作,每秒按顺序执行 在第i秒开始的时候,在方格(x,y)上,获得(x,y)的值 在偶数秒,周围四格的值清零 每秒可 ...
- 洛咕11月月赛部分题解 By cellur925
听说是你谷史上最水月赛?我不听我最菜 T1:终于结束的起点 月天歌名好评 给你一个模数 \(M\),请你求出最小的 \(n > 0\),使得\(fib(n)\) \(mod\) \(m=0\), ...
- 洛咕 P2465 [SDOI2008]山贼集团
裸的状压dp. 设f[i][j]表示在i字数内放j集合的分部,直接sb转移. // luogu-judger-enable-o2 #include<bits/stdc++.h> #defi ...
- 【洛咕P3400】仓鼠窝【单调栈】
死灵复活时间ouo 闲的没事儿才写博客的死鸽子 这道题为P5300埋下了很好的伏笔qwq解法是差不多的. 一个矩阵里面的子矩阵有多少个很好求 如果加上了一些限制,我们就要重新考虑. 第一个逻辑是把大问 ...
- 洛咕 P3964 [TJOI2013]松鼠聚会
有个结论就是把坐标\((x,y)\)变形成\(((x+y)/2,(x-y)/2)\),切比雪夫距离就变成了曼哈顿距离. 所以变换一下坐标直接统计答案即可. // luogu-judger-enable ...
- 洛咕 P2463 [SDOI2008]Sandy的卡片
哈希水过. 首先这是一段delta相同的序列,按照套路差分一下,b[i]=a[i]-a[i-1],然后就是这些序列的最长公共子段 由于数据范围很小,就可以二分,枚举第一个序列的子段然后每个子序列暴力c ...
最新文章
- Maven的配置文件pom.xml
- 【SeeMusic】购买付费版本 ( 进入购买页面 | 购买流程 )
- linux环境中,top命令中,对command的命令进行扩展查看详情?
- EOJ_1017_座位分配
- 【Boost】boost库中thread多线程详解10——condition条件变量
- delphi 执行长时间存储过程 显示进度_项目管理_十大管理体系之「项目进度管理」知识整理及心得分享...
- 如何让程序集在每次编译时自动产生不同的版本号
- python基础补漏-03-函数
- Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中,实现查询的方法...
- matlab冲激函数的傅里叶变换,信号与系统课件14.ppt
- KVM虚拟化技术原理简介
- 商汤科技VS旷视科技VS依图科技(转)
- html中ul怎么写,HTML: ul 标签
- 电商小程序开发要多少钱?一文看懂电商小程序开发成本
- SDHC ADMA和SDMA区别
- 从零搭建vue-ssr详细介绍
- 车间生产管理系统严格管控生产全过程?7大步骤分享
- CSS(列表+表格+链接+自定义鼠标光标)样式
- 提升效率之如何打印出漂亮的带颜色的日志(输出高亮)
- 域名抢注自动提交程序详解