[POI2012] BEZ-Minimalist Security
一张n个点m条边的无向图,有点权有边权都是非负,且每条边的权值小于等于两个顶点的权值和,现在要将每个点减一个非负整数使得每条边权等于两个顶点的点权和,问最大修改代价和最小修改代价
思路神的一匹,完全想不出来,对着题解想了半天才有点理解
首先有一个小结论:对于一个联通块,如果一个顶点的值确定了,其余顶点的值都能确定。这是显然的,因为直接用一条边的边权减去已知点权就是另一个点的权值。如果我们设一个点的权值为x,与之相连的边权为w,另一点点权即为w-x
这样的话其实整个联通块内所有的点权都可以表示成y=k*x+b(k∈(-1,1))的形式,我们对于解一下关于y的不等式即可
特别注意的是,如果图中存在奇环,那么某个点会存在两种系数不同的表示,这时我们直接解这个方程就可以求出x的唯一解

这时我们还得保证x解出来为整数,这也是做这个题目要注意的的一点
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cstdlib>
#define N 300010
#define M 5000010
#define ll long long
using namespace std;
queue<int>qx,qy; int n,m,num;
int head[N],val[N],q[N];
bool vis[N][];
ll ans1,ans2,v[N][]; int read()
{
char ch=getchar(); int f=,x=;
while(ch>''||ch<'') {if(ch=='-') f=-; ch=getchar();}
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*f;
} struct point{
int next,to,dis;
}e[M<<]; void add(int from,int to,int dis)
{
e[++num].next=head[from];
e[num].to=to;
e[num].dis=dis;
head[from]=num;
} void bfs(int x)
{
vis[x][]=;
qx.push(x); qy.push();
int tot=; q[++tot]=x;
while(!qx.empty())
{
int a=qx.front(),b=qy.front();
qx.pop(); qy.pop();
for(int i=head[a];i;i=e[i].next)
{
int to=e[i].to;
if(!vis[to][]&&!vis[to][]) q[++tot]=to;
if(vis[to][b^])
{
if(v[to][b^]!=e[i].dis-v[a][b]) {printf("NIE"); exit();}
}
else
{
vis[to][b^]=,v[to][b^]=e[i].dis-v[a][b];
qx.push(to); qy.push(b^);
}
}
}
ll L=,R=val[x],sum1=,sum2=;
for(int i=;i<=tot;i++)
{
int a=q[i];
if(vis[a][]) L=max(L,-v[a][]),R=min(R,val[a]-v[a][]);
if(vis[a][]) L=max(L,v[a][]-val[a]),R=min(R,v[a][]);
if(vis[a][]&&vis[a][])
{
if((v[a][]-v[a][])&) {printf("NIE"); exit();}
L=max(L,(v[a][]-v[a][])>>);
R=min(R,(v[a][]-v[a][])>>);
}
}
if(L>R) {printf("NIE"); exit();}
for(int i=;i<=tot;i++)
{
int a=q[i];
if(vis[a][]) sum1+=val[a]-L-v[a][],sum2+=val[a]-R-v[a][];
else sum1+=val[a]+L-v[a][],sum2+=val[a]+R-v[a][];
}
if(sum1>sum2) swap(sum1,sum2);
ans1+=sum1,ans2+=sum2;
} int main()
{
n=read(); m=read();
for(int i=;i<=n;i++) val[i]=read();
for(int i=;i<=m;i++)
{
int x=read(),y=read(),z=read();
add(x,y,z); add(y,x,z);
}
for(int i=;i<=n;i++)
if(!vis[i][]&&!vis[i][])
bfs(i);
printf("%lld %lld",ans1,ans2);
return ;
}
[POI2012] BEZ-Minimalist Security的更多相关文章
- 【BZOJ2801】[Poi2012]Minimalist Security BFS
[BZOJ2801][Poi2012]Minimalist Security Description 给出一个N个顶点.M条边的无向图,边(u,v)有权值w(u,v),顶点i也有权值p(i),并且对于 ...
- bzoj 2801 [Poi2012]Minimalist Security 设一个,求出所有
题目大意 给出一个N个顶点.M条边的无向图,边(u,v)有权值w(u,v),顶点i也有权值p(i), 并且对于每条边(u,v)都满足p(u)+p(v)>=w(u,v). 现在要将顶点i的权值减去 ...
- POI2012题解
POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ_2801_[Poi2012]Minimalist Security_dfs树+特判+乱搞
BZOJ_2801_[Poi2012]Minimalist Security_dfs树+特判+乱搞 Description 给出一个N个顶点.M条边的无向图,边(u,v)有权值w(u,v),顶点i也有 ...
- 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\),和它在同一 ...
- POI2012 BEZ-Minimalist Security | noi.ac #537 Graph
题目链接:戳我 首先注意这张图有可能不连通!! 然后我们考虑对于每一个联通块,首先任意确定一个点,给它设最终值为x,然后进行搜索.(因为对于一个联通块而言,我们知道一个点的最终值,那么整个联通块上面点 ...
- Security Policy:行级安全(Row-Level Security)
行级安全RLS(Row-Level Security)是在数据行级别上控制用户的访问,控制用户只能访问数据库表的特定数据行.断言是逻辑表达式,在SQL Server 2016中,RLS是基于安全断言( ...
- Content Security Policy 入门教程
阮一峰文章:Content Security Policy 入门教程
随机推荐
- grid++report中篇
QQ:1187362408 欢迎技术交流和学习 grid++report中篇(grid++report): TODO: 1.grid++report:简单介绍( Grid++Report 是一款高性能 ...
- iOS-数组,字典常用的字面量写法
解决方法: //用字面量创建数组 NSArray *array = @[@"one",@"two"]; //用字面量创建字典 NSDictionary *dic ...
- scrapy工程创建及pycharm运行
1.通过命令行创建scrapy工程项目 scrapy startproject (工程名) scrapy startproject myxml 2.利用爬虫模板设置爬虫文件 在这个过程中我们可以先利用 ...
- Linux中搭建HTTP服务器
1.配置IP [root@localhost~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static ...
- 巨蟒python全栈开发-第14天 内置函数2 递归 二分查找
一.今日内容总览 1.内置函数补充 repr() 显示出字符串的官方表示形式 chr() arscii码中的字,转换成位置 ord() arscii码中的位置,转换成字2.递归 自己调用自己 两个口: ...
- fastJson API
FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能. 实际上其他的json处理工具都和 ...
- 解决URL地址中的中文乱码问题的办法
解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生 ...
- Python爬虫之-Requests
Requests模块 Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了. 它是为另一个时代.另一个互联网所创建的.它需要巨量的 ...
- 3个Activity间的切换
package com.yarin.android.Examples_03_01; import android.app.Activity; import android.content.Intent ...
- jQuery.extend()、jQuery.fn.extend()扩展方法具体解释
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/dreamsunday/article/details/25193459 jQuery自己定义了jQu ...