P6185 [NOI Online #1 提高组] 序列
又因为一个小错误浪费了1个半小时。。。我是真的sb啊! 题意:将数组a经过两种操作使得和b数组相等: 操作1:将a数组中,i和j两个下标的数同时加1或者减1. 操作2:将a数组上两个下标值一个加1一个减一,或者一个减1一个加1 思路: 1.操作2一个加1一个减1,但两个数总和不变,由于该操作的传递性,可形成一个连通块,在此连通块内可任意调整值。可理解为缩点操作 2.操作1对数组a同时加1或减1,可转化为a部点加1,b部点减1,或相反。 若是二分图,则a部点值之和要等于b部点权值之和 若非二分图,则此时只对数组a操作,不涉及操作2,要保证操作前前后奇偶行相同,因为每次操作都是加2或者减去2.
#include
#define int long long
#define endl '\n'
using namespace std;
const int N=7e5+10;
const int inf=0x3f3f3f3f;
int n,m,a[N],b[N],f[N],p[N],q[N],g,sz[N],num[3],col[N];
vectore[N];
int r_find(int r)
{
return r==f[r]?r:(f[r]=r_find(f[r]));
}
bool dfs(int x,int c)
{
col[x]=c,num[c]+=sz[x];
int flag=1;
for(int i=0;i>n>>m;
for(int i=1;i>a[i];
for(int i=1;i>b[i];
g=0;
for(int i=1;iop>>x>>y;
if(op==2) f[r_find(x)]=r_find(y);
else p[++g]=x,q[g]=y;
}
for(int i=1;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?