BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)
化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\)
发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一个联通块的所有点\(j\)的权值\(x_j\)都确定下来了,并且那些点的权值都可以用\((k_jz_i+b_j(k_j\in \{-1,1\})\)来表示。因此一个联通块的答案\(ans\)为:\[z_i\Sigma {k_j}+\Sigma{b_j}\]
然后因为限制了\(0\le z_j \le p_j\),所以把所有\(x_j\)用\(x_i\)表示出来可以得到一个不等式组。解出来\(z_i\)的极值可以对应到\(ans\)的极值了。
代码:
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define inf 100000000
#define N 500005
using namespace std;
int p[N],b[N],k[N],cnt=0,head[N],mn,mx;
bool vis[N];
ll ans1=0,ans2=0,K,B;
struct ed{
int v,w,nxt;
}e[N*20];
inline void add(int u,int v,int w){
e[++cnt]=(ed){v,w,head[u]},head[u]=cnt;
e[++cnt]=(ed){u,w,head[v]},head[v]=cnt;
}
inline void read(int &y){
int x=0;char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
y=x;
}
void dfs(int u,int fa){
//0<= k*x+b <=p_u
if(k[u]<0) mn=max(mn,b[u]-p[u]), mx=min(mx,b[u]);//负数变号
else mn=max(-b[u],mn), mx=min(p[u]-b[u],mx);
K+=1ll*k[u], B+=1ll*b[u];
if(mn>mx){
puts("NIE");
exit(0);
}
for(register int i=head[u];i;i=e[i].nxt){
int to=e[i].v,wi=e[i].w;
if(to!=fa){
int tmp=wi-b[u];
if(vis[to]){
if(k[to]!=k[u] && tmp!=b[to]){//偶环判无解,k相等,b相等
puts("NIE");
exit(0);
} else{
if(k[to]==k[u]){//奇环可以解出xi的值,代入看范围
//k1*xi+b1=k2*xi+b2
if((b[to]-tmp)%(-2*k[u])!=0){//权值非整数
puts("NIE");
exit(0);
}
mn=max(mn,(b[to]-tmp)/(-2*k[u]));
mx=min(mx,(b[to]-tmp)/(-2*k[u]));
if(mn>mx){
puts("NIE");
exit(0);
}
}
}
} else{
vis[to]=1;
k[to]=-k[u];
b[to]=tmp;
dfs(to,u);
}
}
}
}
int main(){
register int n,m,u,v,w,i;
read(n),read(m);
for(i=1;i<=n;++i) read(p[i]);
for(i=1;i<=m;++i){
read(u),read(v),read(w);
add(u,v,p[u]+p[v]-w);
}
for(i=1;i<=n;++i){
if(!vis[i]){
vis[i]=1;
K=B=0;
k[i]=1,b[i]=0;
mx=inf,mn=-inf;
dfs(i,0);
ans1+=min(1ll*mn*K+B,1ll*mx*K+B);
ans2+=max(1ll*mn*K+B,1ll*mx*K+B);
}
}
printf("%lld %lld",ans1,ans2);
}
BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)的更多相关文章
- 【题解】洛谷P1073 [NOIP2009TG] 最优贸易(SPFA+分层图)
次元传送门:洛谷P1073 思路 一开始看题目嗅出了强连通分量的气息 但是嫌长没打 听机房做过的dalao说可以用分层图 从来没用过 就参考题解了解一下 因为每个城市可以走好几次 所以说我们可以在图上 ...
- 洛谷 P6776 - [NOI2020] 超现实树(找性质,神仙题)
洛谷题面传送门 nb tea 一道! 首先考虑怎样入手分析这个看似非常不可做的问题.首先题目涉及高度无穷的树,根本枚举不了.不过我们冷静一下就会发现,如果我们记 \(mx=\max\limits_{i ...
- 洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解题报告
P3539 [POI2012]ROZ-Fibonacci Representation 题意:给一个数,问最少可以用几个斐波那契数加加减减凑出来 多组数据10 数据范围1e17 第一次瞬间yy出做法, ...
- 洛谷P3533 [POI2012]RAN-Rendezvous
P3533 [POI2012]RAN-Rendezvous 题目描述 Byteasar is a ranger who works in the Arrow Cave - a famous rende ...
- 洛谷P3538 [POI2012]OKR-A Horrible Poem [字符串hash]
题目传送门 A Horrible Poem 题目描述 Bytie boy has to learn a fragment of a certain poem by heart. The poem, f ...
- 洛谷P3539 [POI2012] ROZ-Fibonacci Representation
题目传送门 转载自:five20,转载请注明出处 本来看到这题,蒟蒻是真心没有把握的,还是five20大佬巨orz 首先由于斐波拉契数的前两项是1,1 ,所以易得对于任何整数必能写成多个斐波拉契数加减 ...
- 洛谷P3537 [POI2012]SZA-Cloakroom(背包)
传送门 蠢了……还以为背包只能用来维护方案数呢……没想到背包这么神奇…… 我们用$dp[i]$表示当$c$的和为$i$时,所有的方案中使得最小的$b$最大时最小的$b$是多少 然后把所有的点按照$a$ ...
- 洛谷P3531 [POI2012]LIT-Letters
题目描述 Little Johnny has a very long surname. Yet he is not the only such person in his milieu. As it ...
- 洛谷P3534 [POI2012] STU
题目 二分好题 首先用二分找最小的绝对值差,对于每个a[i]都两个方向扫一遍,先都改成差满足的形式,然后再找a[k]等于0的情况,发现如果a[k]要变成0,则从他到左右两个方向上必会有两个连续的区间也 ...
随机推荐
- centos安装bundle文件
centos安装VMware-Workstation-Full-*.bundle那点事 | 鳗鱼是条狗https://kinggoo.com/centos-vmware.htm Linux 下 VMW ...
- vs快捷键 C#
快速构建构造函数 输入 ctor 然后按 TAB 键 快速构建自动属性 在变量那里,右击鼠标,点“重构”--“封装字段” Visual Studio快捷键 [VS2008/VS2005] ****** ...
- ORACLE 当字段中有数据如何修改字段类型
创建视图的时候,因为表太多,里面一些字段类型不一样,PL/SQL报错,为‘表达式必须具有对应表达式相同的数据类型’,发现后,一个字段的类型为CLOB和VARCHAR2(4000)两种,将CLOB进行修 ...
- 3 HTTP 协议
1 什么是HTTP 协议 HTTP (HyperText Transfer Protocol),即超文本传输协议, 17年以前互联网上应用最广泛的协议,之后所有网站都开始使用HTTPS协议(基于HTT ...
- Oracle NVL空值处理函数
--NVL空值处理函数 --需求:显示价格表中业主类型ID为1的价格记录 如果上限值为null,则显示9999999 ) from dual; select * from t_pricetable ) ...
- (自用 )npm --save和--save-dev区别
https://blog.csdn.net/playboyanta123/article/details/78349034(原文) 目前大多数基于vue的项目都是用vue-cli 创建的.当创建项目完 ...
- 关于Navicat连接虚拟机宝塔数据库
1.由于虚拟机安装的宝塔面板,目前没找到数据库安全配置文件,所以没能用Navicat连接数据库 2.在宝塔面板=>安全下 放行 3306 端口 即可以 连接成功 跟将bind-address = ...
- Python给照片换底色(蓝底换红底)
环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN10 64位,安装的函数库是 numpy-1.13.1+mkl-cp36-cp36m-w ...
- 微服务架构中APIGateway原理
背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest ...
- 老男孩python学习自修第六天【pycharm的使用】
1.在工程右键可选新建文件夹,包盒python文件 文件夹和包的区别在于,包包含一个空的__init__.py文件,而文件夹没有 2.pycharm的断点调试 点击Debug表示进入调试状态 点击Re ...