正题

题目链接:http://noip.ybtoj.com.cn/contest/105/problem/3


题目大意

nnn个点mmm条边的图,保证每条边两边的点权和大于等于边权。现在要去减去最少/多的点权使得每条边的边权等于两边的点权。


解题思路

对与一个连通块,显然确定一个就可以确定别的,但是我们无法枚举这个。所以我们设第一个为xxx,然后后面的都可以表示成kx+bkx+bkx+b的形式,之后因为每个点的点权有限制,这样我们就可以确定xxx的范围。

对与环的情况判断一下k1x+b1=k2x+b2k_1x+b_1=k_2x+b_2k1​x+b1​=k2​x+b2​的方程解的情况即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#define ll long long
using namespace std;
const ll N=5e5+10;
struct node{ll to,next,w;
}a[N*12];
ll n,m,p[N],k[N],b[N],sumk,sumb;
ll l,r,maxs,mins,tot,ls[N];
bool v[N],vis[N];
ll read() {ll x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
ll check(ll K,ll B,ll x){if((K-k[x])==0){if(b[x]-B)return 0;return 1;}if((b[x]-B)%(K-k[x])!=0)return 0;ll w=(b[x]-B)/(K-k[x]);if(l>w||w>r)return 0;l=w;r=w;return 1;
}
bool dfs(ll x){v[x]=1;sumk+=k[x];sumb+=b[x];if(k[x]==1){l=max(l,-b[x]);r=min(r,p[x]-b[x]);if(l>r)return 0;}else{l=max(l,b[x]-p[x]);r=min(r,b[x]);if(l>r)return 0;}for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(v[y]){if(!check(-k[x],a[i].w-b[x],y))return 0;}else{k[y]=-k[x];b[y]=a[i].w-b[x];if(!dfs(y))return 0;}}return 1;
}
int main()
{//  freopen("diamond.in","r",stdin);
//  freopen("diamond.out","w",stdout);n=read();m=read();ll sum=0;for(ll i=1;i<=n;i++)sum+=(p[i]=read());for(ll i=1;i<=m;i++){ll x=read(),y=read(),w=read();addl(x,y,w);addl(y,x,w);}for(ll i=1;i<=n;i++){if(v[i])continue;l=sumk=sumb=0;r=p[i];k[i]=1; if(!dfs(i))return printf("NIE\n")&0;else{if(sumk<0)maxs+=l*sumk+sumb,mins+=r*sumk+sumb;else maxs+=r*sumk+sumb,mins+=l*sumk+sumb;}}printf("%lld %lld\n",sum-maxs,sum-mins);
}

YbtOJ#20073-[NOIP2020模拟赛B组Day6]钻石守卫【构造】相关推荐

  1. YbtOj#20073. 「NOIP2020 模拟赛 B 组 Day6」钻石守卫

    文章目录 ResultResultResult HyperlinkHyperlinkHyperlink DescriptionDescriptionDescription SolutionSoluti ...

  2. YbtOJ#20072-[NOIP2020模拟赛B组Day6]相似子串【根号分治】

    正题 题目链接:http://noip.ybtoj.com.cn/contest/105/problem/2 题目大意 一个010101串,qqq个询问,每次询问有多少个长度为mmm的子串010101 ...

  3. YbtOJ#20237-[冲刺NOIP2020模拟赛Day10]区间均值【树状数组】

    正题 题目链接:https://www.ybtoj.com.cn/contest/68/problem/1 题目大意 nnn个数字的序列,求有多少个区间[l,r][l,r][l,r]的平均值在[L,R ...

  4. YbtOJ#20240-[冲刺NOIP2020模拟赛Day10]弱者对决【笛卡尔树,区间dp】

    正题 题目链接:https://www.ybtoj.com.cn/contest/68/problem/4 题目大意 mmm个三元组(ai,bi,ci)(a_i,b_i,c_i)(ai​,bi​,ci ...

  5. YbtOJ#20239-[冲刺NOIP2020模拟赛Day10]连边方案【状压dp】

    正题 题目链接:https://www.ybtoj.com.cn/contest/68/problem/3 题目大意 求有多少个nnn个点mmm条边的无向图满足 有连边的点之间编号差不超过kkk 所有 ...

  6. YbtOJ#20236-[冲刺NOIP2020模拟赛Day9]红点蓝点【线段树,堆】

    正题 题目链接:https://www.ybtoj.com.cn/contest/66/problem/4 题目大意 平面上nnn个红点,nnn个蓝点,对于没一个红点求一个与它纵坐标距离不超过ddd的 ...

  7. YbtOJ#20235-[冲刺NOIP2020模拟赛Day9]公共序列【dp】

    正题 题目链接:https://www.ybtoj.com.cn/contest/66/problem/3 题目大意 给出两个字符串A,BA,BA,B,求它们的最长公共子序列. 解题思路 先考虑朴素的 ...

  8. #20071-[NOIP2020模拟赛B组Day6]礼物购买【二分】

    正题 题目链接:http://noip.ybtoj.com.cn/contest/105/problem/1 题目大意 nnn个物品,每个价格为viv_ivi​有xix_ixi​个,mmm次,开始有w ...

  9. YbtOj 冲刺 NOIP2020 模拟赛 Day10 T1 区间均值

    文章目录 ResultResultResult HyperlinkHyperlinkHyperlink DescriptionDescriptionDescription SolutionSoluti ...

最新文章

  1. Java基础-序列化与反序列化
  2. linux更改用户的shell,Linux下通过shell更改用户密码
  3. WINCE基于PWM实现的背光驱动
  4. VTK:Filtering之AppendFilter
  5. TCPDUMP/LIBPCAP 3-PCAP 中文手册(1)
  6. 审计工作存在的难点和问题_电力工程造价审计的难点与对策有哪些?学习安装电力造价广联达计价看这里!!...
  7. cisco ios命令
  8. Linux网络环境搭建,rh401 - 简单PXE网络引导环境的搭建
  9. 软件公司为什么要加密源代码,而且是前前后后,反反复复
  10. 使用DEVC创建C语言工程
  11. 500强企业常用的高效工作方法
  12. DNS、NS、DDNS
  13. animator 控制移动_Unity UGUI通过摇杆控制角色移动
  14. FLEXPART安装笔记,ubantu,grib_api,eccodes,NetCDF
  15. mysqld: Can't create/write to file 'D:
  16. Apache Drill初探
  17. 第4章 软件的设计——总体设计与详细设计
  18. VB与C#的区别(转载)
  19. 测试开发工作者日记:2020.6.17
  20. 软件项目实施原则规范

热门文章

  1. apache 2.4 httpd.conf 详解_Linux Centos服务子系统详解
  2. 不同服务器数据库表连接查询修改,如何连接多个数据库,mysql中的服务器和查询两个表中的对方?...
  3. matlab画孔斯曲面,CAD CAM技术基础:第五讲 孔斯曲面
  4. java 云架构_java版Spring Cloud云架构代码结构构建
  5. 剑指 Offer 05. 替换空格(两种做法)
  6. 7-2 旅行售货员 (10 分)(TSP问题思路加详解)
  7. java当中日期类的相关操作(学习笔记)
  8. [数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构
  9. DDIA笔记—第六章 数据分区
  10. AVL树(平衡二叉树)讲解,入门篇,适合新手观看