P6185 序列 题解
如果发现自己莫名其妙错了,可能是代码 UB,还开 O2!!!!!!!!!!!
首先,对于每个操作 2,将
用并查集将每个连通块缩点,然后对于每个操作 1,将
我们想求出操作 1 的影响范围。发现沿着一条路径,路径上每一个点都可以传递这个
-
如果该连通块是二分图,则当决定了一个操作 1 的起点,这个
就只能同时让两边加减,不能让任意两个点同时增加(减少)。这种情况下能达成目标,说明左部点和右部点总和相等。 -
如果该连通块不是二分图,肯定可以用路径传导的方式,让任意两个点同时增加(减少)。这种情况下能达成目标,说明
是偶数。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
int T;
int n, m;
int a[N], b[N];
int cnt = 0, p[N], q[N];
int fa[N], sz[N];
void init() {
for (int i = 1; i <= n; i++)
fa[i] = i, sz[i] = 1;
return ;
}
int fnd(int x) {
if (fa[x] == x)
return x;
return fa[x] = fnd(fa[x]);
}
void unn(int x, int y) {
x = fnd(x), y = fnd(y);
if (x == y)
return ;
if (sz[x] > sz[y])
swap(x, y);
fa[x] = y;
sz[y] += sz[x];
return ;
}
vector<int> e[N];
int vis[N];
ll cs[3] = {};
ll s[N];
bool dfs(int x, int clr) {
cs[clr] += s[x];
vis[x] = clr;
bool ok = true;
for (int i = 0; i < e[x].size(); i++) {
if (vis[e[x][i]] && vis[x] == vis[e[x][i]])
ok = false;
if (!vis[e[x][i]] && !dfs(e[x][i], 3 - clr))
ok = false;
}
return ok;
}
bool slv() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
e[i].clear();
s[i] = 0;
vis[i] = 0;
}
for (int i = 1; i <= n; i++)
cin >> b[i];
init();
cnt = 0;
for (int i = 1, o, x, y; i <= m; i++) {
cin >> o >> x >> y;
if (o == 1) {
cnt++;
p[cnt] = x, q[cnt] = y;
}
else
unn(x, y);
}
for (int i = 1; i <= n; i++)
s[fnd(i)] += b[i] - a[i];
for (int i = 1; i <= cnt; i++) {
e[fnd(p[i])].push_back(fnd(q[i]));
e[fnd(q[i])].push_back(fnd(p[i]));
}
for (int i = 1; i <= n; i++)
if (fnd(i) == i && !vis[i]) {
cs[1] = cs[2] = 0;
bool ok = dfs(i, 1);
if (ok && cs[1] != cs[2])
return false;
if (!ok && ((cs[1] ^ cs[2]) % 2))
return false;
}
return true;
}
int main() {
cin >> T;
while (T--) {
if (slv())
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验