[luogu6185]序列
对于2操作,如果把这些操作看成边,那么对于某一个连通块内的若干个点,满足权值可以任意分配(证明:归纳,若n个点可以,那么先将新增的点调整好,再对原来n个点重新分配即可),因此可以将原图缩点,并将连通块的和作为新的权值
1操作比较复杂,同样把其当成边连起来,形成一张图(包括自环),然后考虑图中的一个连通块
对这张图,我们可以将操作复杂化:1.对一条长度为奇数的链,两端+1或-1;2.对一条长度为偶数的脸,两端一端+1,一端-1(转化的正确性容易证明)
如果不存在奇环,那么可以二分图染色,之后相当于左右各是一张2操作的完全图,左右之间点权差不变,即需要满足差值与目标差值相同即可
如果存在奇环,那么任意两点之间既存在一条奇数边,又存在一条偶数边,所以相当于既是2操作的完全图,又可以让总点权+2,那么只需要和与目标的和奇偶性相同即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 struct ji{
5 int nex,to;
6 }edge[N<<1];
7 vector<int>v[3][N];
8 int E,t,n,m,p,x,y,head[N],bl[N],a[N],b[N],sum[N];
9 void add(int x,int y){
10 edge[E].nex=head[x];
11 edge[E].to=y;
12 head[x]=E++;
13 }
14 void dfs1(int k){
15 if (bl[k])return;
16 bl[k]=x;
17 sum[x]+=a[k]-b[k];
18 for(int i=0;i<v[2][k].size();i++)dfs1(v[2][k][i]);
19 }
20 bool dfs2(int k,int p){
21 if (bl[k]>=0)return bl[k]==p;
22 if (p)x+=sum[k];
23 else y+=sum[k];
24 bl[k]=p;
25 bool flag=1;
26 for(int i=head[k];i!=-1;i=edge[i].nex)flag&=dfs2(edge[i].to,p^1);
27 return flag;
28 }
29 int main(){
30 scanf("%d",&t);
31 while (t--){
32 scanf("%d%d",&n,&m);
33 E=0;
34 memset(bl,0,sizeof(bl));
35 memset(sum,0,sizeof(sum));
36 memset(head,-1,sizeof(head));
37 for(int i=1;i<=n;i++)v[1][i].clear();
38 for(int i=1;i<=n;i++)v[2][i].clear();
39 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
40 for(int i=1;i<=n;i++)scanf("%d",&b[i]);
41 for(int i=1;i<=m;i++){
42 scanf("%d%d%d",&p,&x,&y);
43 v[p][x].push_back(y);
44 v[p][y].push_back(x);
45 }
46 x=0;
47 for(int i=1;i<=n;i++)
48 if (!bl[i]){
49 x++;
50 dfs1(i);
51 }
52 for(int i=1;i<=n;i++)
53 for(int j=0;j<v[1][i].size();j++)add(bl[i],bl[v[1][i][j]]);
54 memset(bl,-1,sizeof(bl));
55 n=x;
56 bool flag=1;
57 for(int i=1;i<=n;i++)
58 if (bl[i]<0){
59 x=y=0;
60 p=dfs2(i,0);
61 if (p)flag&=(x==y);
62 else flag&=((x+y)%2==0);
63 }
64 if (flag)printf("YES\n");
65 else printf("NO\n");
66 }
67 }
[luogu6185]序列的更多相关文章
- 【夯实PHP基础】UML序列图总结
原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...
- Windows10-UWP中设备序列显示不同XAML的三种方式[3]
阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...
- 软件工程里的UML序列图的概念和总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...
- python序列,字典备忘
初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...
- BZOJ 1251: 序列终结者 [splay]
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3778 Solved: 1583[Submit][Status][Discu ...
- 最长不下降序列nlogn算法
显然n方算法在比赛中是没有什么用的(不会这么容易就过的),所以nlogn的算法尤为重要. 分析: 开2个数组,一个a记原数,f[k]表示长度为f的不下降子序列末尾元素的最小值,tot表示当前已知的最长 ...
- [LeetCode] Sequence Reconstruction 序列重建
Check whether the original sequence org can be uniquely reconstructed from the sequences in seqs. Th ...
- [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
- [LeetCode] Repeated DNA Sequences 求重复的DNA序列
All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...
随机推荐
- 构建idea父工程
构建idea父工程 首先通过idea新建一个Maven项目: 选择本地Maven版本: 工程名称: 选择字符编码:utf-8 file -> Settings -> Editor -> ...
- 洛谷3288 SCOI2014方伯伯运椰子(分数规划+spfa)
纪念博客又一次爆炸了 首先,对于本题中,我们可以发现,保证存在正整数解,就表示一定费用会降低.又因为一旦加大的流量,费用一定会变大,所以总流量一定是不变的 那么我们这时候就需要考虑一个退流的过程 对于 ...
- Apache Shiro漏洞绕过waf小tips
看了篇文章觉得不错记录下以免以后找不到,原理是通过base64解码特性导致waf不能成功解码绕过waf检测从而进行攻击 解码情况: payload php python openresty java ...
- git 更新与图形界面
git 软件更新:git update-git-for-windows 或者 git update gitk 是一个历史记录的图形化查看器. 使用:只需 cd 到一个 Git 仓库,然后键入:gitk ...
- Perl操作excel2007的模块
详细版:https://www.jianshu.com/p/84bda53827c8 第一种方法: 读写excel2007文档的perl模块: Spreadsheet::XLSX(读)和Spreads ...
- 在Vue&Element前端项目中,对于字典列表的显示处理
在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如 ...
- 【UE4 C++ 基础知识】<3> 基本数据类型、字符串处理及转换
基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR ...
- 【UE4 设计模式】设计模式一些概念
定义 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性. 四人帮 GOF ( Gang of Four ...
- 封装ARX给.Net调用
1:创建工程名.def的文件,内容如下: 2:def文件位置: 3:属性页配置: 4:acrxEntryPoint.cpp下面添加如下代码(可以传参数) 5:c#调用 怕自己忘记,记录一下.
- 洛谷 P3232 [HNOI2013]游走
链接: P3232 题意: 和上次考试 T4 的简化且无修改一样,经典图上高斯消元求期望. 分析: 要求出每个点的期望出发次数 \(f_i\),每个点度数为 \(d_i\),有 \[f1=\sum\d ...