P10201 永恒

news/2025/10/10 21:44:54/文章来源:https://www.cnblogs.com/leizepromax/p/19133940

好题。

对于一次询问 \((x_1,y_1)\)\((x_2,y_2)\),显然若两点不在同一个联通块中则无解。考虑在同一个联通块中的答案。

我们对整张图进行黑白染色。则有结论:若黑色/白色格点存在不同的数,则一定有解。

证明:设此时黑色格点存在两个格点的数互不相同,设这两个格点为 \((a,b)\)\((c,d)\),我们再寻找一个点 \((x,y)\),满足 \((a,b)\) 可达 \((x,y)\)\((x,y)\) 可达 \((c,d)\)。则我们有这样一条路线:\((x_1,y_1)->...->(a,b)->(x,y)->(c,d)->(x,y)->(a,b)->...->(x,y)->(p,q)->...->(x_2,y_2)\)。考虑这样的路线怎样构造合法解。

对于前半段 \((x_1,y_1)->...->(a,b)\) 和后半段 \((p,q)->...->(x_2,y_2)\),这段的权值是常数,我们不用管。考虑中间一段如何构造。设 \((a,b)\) 的点权为 \(a\)\((c,d)\) 的点权为 \(c\)\((x,y)\) 的点权为 \(b\),则中间的权值可以写成 \(\overline{b?b?b?...?b}\),其中 \(?\) 既可以是 \(a\) 也可以是 \(c\)
我们先将 \(?\) 全部填成 \(c\),再考虑将 \(c\) 修改成 \(a\) 造成的影响。令路径长为 \(2 \times (P-1) \times (P-1)+1\),则每个 \(?\) 的贡献是 \(a\)\(c\) 的权值 \(\times 100^k\)\(k \in [1,(P-1) \times (P-1)]\)。根据费马小定理我们可以得到 \(100^{P-1} \equiv 1(mod\) \(P)\),而 \(k\) 的取值中满足 \((P-1)|k\)\(k\) 共有 \(P-1\) 种,也就是我们可以依靠这些位将路径的权值加上不超过 \(P-1\)\(a-c\)。由于 \((a-c,P)=1\),所以我们将路径权值加上 \(s\)\(a-c\)\(s \in [0,P-1]\) 可以取遍 \(P\) 的剩余系中所有数,于是路径的权值可以是任何数。

于是对于每次查询,我们只需要判断 \((x_1,y_1)\)\((x_2,y_2)\) 是否在同一个联通块,以及联通块中相同颜色是否存在不同的数即可。

对于不满足条件(同色格的数字都相同)的情况,我们可以预处理出每两种数字对于所有权值是否可达,查询时直接查表即可。这部分的复杂度为 \(O(100P)\)

对于动态维护联通块信息,我们使用线段树分治 \(+\) 可撤销并查集即可。

#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int mod=1145141,N=510,M=250010,T=2e5+10;
int n,m,Q,Id,mp[N][N],lst[N][N],fa[M],siz[M];
int num[2][M],ans[T],vis[N][N],col[M];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
struct Qry{int st,ed,tar;}q[T];
struct node{int x,y,v;};
vector<node>e[T<<2];
vector<pair<int*,int> >stk;
bool can[10][10][2][mod];
inline int id(int i,int j) {return (i-1)*m+j;}
inline int find(int x) {return x==fa[x]?x:find(fa[x]);}
inline void pb(int &x,int y) {stk.push_back({&x,x});x=y;}
inline void merge(int u,int v) {u=find(u);v=find(v);if(u==v) return ;if(siz[u]>siz[v]) swap(u,v);pb(fa[u],v);pb(siz[v],siz[v]+siz[u]);for(int i=0;i<2;++i) {if(num[i][u]!=-1&&num[i][v]!=-1&&num[i][u]!=num[i][v]) pb(num[i][v],-2);if(num[i][v]==-1&&num[i][u]!=-1) pb(num[i][v],num[i][u]);}
}
inline void back() {while(stk.back().fi!=nullptr) *stk.back().fi=stk.back().se,stk.pop_back();stk.pop_back();
}
#define mid ((l+r)>>1)
#define ls p<<1
#define rs p<<1|1
inline void add(int p,int l,int r,int L,int R,int x,int y,int v) {if(l>R||r<L) return ;if(l>=L&&r<=R) {e[p].push_back((node){x,y,v});return ;}add(ls,l,mid,L,R,x,y,v);add(rs,mid+1,r,L,R,x,y,v);
}
inline void solve(int p,int l,int r) {if(e[p].size()) {stk.push_back({nullptr,0});for(auto [x,y,v]:e[p]) {num[col[id(x,y)]][id(x,y)]=v;pb(vis[x][y],1);for(int i=0;i<4;++i) {int qx=x+dx[i],qy=y+dy[i];if(vis[qx][qy]) merge(id(x,y),id(qx,qy));}}}if(l==r) {if(q[l].st) {int fr=find(q[l].st),to=find(q[l].ed);if(fr!=to) ans[l]=1;else if(num[0][fr]==-2||num[1][fr]==-2) ans[l]=2;else if(num[0][fr]==-1||num[1][fr]==-1) ans[l]=(q[l].tar==num[1][fr]+num[0][fr]+1?2:1);else {int v1=num[col[q[l].st]][fr],v2=num[col[q[l].st]^1][fr];ans[l]=can[v1][v2][col[q[l].st]==col[q[l].ed]][q[l].tar]+1;}}}else solve(ls,l,mid),solve(rs,mid+1,r);if(e[p].size()) back();
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);for(int i=0;i<=9;++i)for(int j=0;j<=9;++j) {int to=0;for(int k=1;;k^=1) {to=(to*10+(k?i:j))%mod;if(can[i][j][k][to]) break;can[i][j][k][to]=1;}}cin>>n>>m>>Q>>Id;for(int i=1;i<=n;++i) {string ch;cin>>ch;for(int j=1;j<=m;++j) mp[i][j]=(ch[j-1]=='#'?-1:ch[j-1]^48),col[id(i,j)]=(i+j)&1,lst[i][j]=1;}for(int i=1;i<=Q;++i) {int opt;cin>>opt;if(opt==1) {int x,y;char c;cin>>x>>y>>c;if(~mp[x][y]) add(1,1,Q,lst[x][y],i-1,x,y,mp[x][y]);lst[x][y]=i;mp[x][y]=c=='#'?-1:(c^48);}else {int x_1,x_2,y_1,y_2,v;cin>>x_1>>y_1>>x_2>>y_2>>v;q[i]=(Qry){id(x_1,y_1),id(x_2,y_2),v};}}for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)if(~mp[i][j]) add(1,1,Q,lst[i][j],Q,i,j,mp[i][j]);for(int i=1;i<=n*m;++i) fa[i]=i,siz[i]=1;memset(num,-1,sizeof(num));solve(1,1,Q);for(int i=1;i<=Q;++i)if(ans[i]) cout<<(ans[i]==2?"Yes":"No")<<'\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1209H tj

zd 讲的啥玩意啊。 题意 你初始的能量为 \(0\),每秒会回复一点能量,同时你每秒可以花 \(x\in [0,2]\) 点能量行走 \(x\) 的距离。 同时地上会有 \(n\) 个传送带,传送带的基础速度为 \(s_i\),求从 \(0\) 走到 \(L\)…

AirBattery - 在Mac上实时监控所有苹果设备电量

AirBattery是一款专为Mac设计的电池监控工具,能够实时显示iPhone、iPad、Apple Watch等苹果设备的电量信息,支持Dock栏、状态栏和小组件显示,让您随时掌握所有设备的电池状态。项目简介 AirBattery 是一款功能强大的…

HTML学习日记

2025.10.10 打卡HTML中尽量不要省略结束标签,而且空元素最好写<br />而不是<br>,这样子做是保证每一个元素都被关闭(空元素在开始标签中关闭)。 使用小写标签,尽管大写也能解析,但是小写标签更被推荐…

10.10每日总结

今天主要的课程有人机交互和机器学习,还有大数据的作业题差一道没完成(用hbase建表),后天就是外语能力大赛的初赛了,加油!

二分图与网络流 Trick

dag 最大独立集(也叫最长反链)Dilworth 定理:一个 dag 中最大独立集的大小,等于其偏序集的最小不可重链覆盖的大小。听着很神秘,实际是这样: 偏序集:对于每一个点三元组 \((i, k, j)\),如果原图中有边 \((i, k…

10月10号

今天进行了日语的学习。 以及对数据结构和离散数学的复习。

win11 系统如何进行硬盘分区?固态硬盘怎么分区?SSD 固态硬盘分区教程

win11本身就有自带的分区功能,所以不用借肋第三方软件也能分区,下面开始分享分区方法。 win11其实和win10差不多,功能也差不多,如果分区过win10可能都不用学就会。 理解原理 将硬盘分区,就是把原有硬盘类式于一个…

10/10

今天上午就一节课,明天放假,雨什么时候停呀

数论(未完)

前言: 复习一下数论(部分) 裴蜀定理 结论: \(∀a,b∈Ζ\),设\(d=gcd(a,b)\) ,则\(∃x,y\)使得\(ax+by=d\) 推论:\(ax+by=m\)有解,当且仅当\(d|m\) 若\(gcd(a,b)=1\),则存在\(x,y\)使得\(ax+by=1\) 对于\(n\)个…

没做完的题

放在这里待办 定义 \[g(n)=2\sum ^n_{i=2}\left \lfloor \frac{n}{i} \right \rfloor^2 \phi(i)+n^2 \]求 \(g(n)\) 定义 \[f(n)=\frac{g(n)-n^2}{2} \]则 \[f(n)=\sum ^n_{i=2}\left \lfloor \frac{n}{i} \right…

JavaScriptDay1

1.什么是JavaScript 1.1 概述 JavaScript是一门世界上最流行的脚本语言 Java、JavaScript 一个合格的后端人员,必须要精通JavaScript 2.快速入门 2.1、引入javaScript内部标签 <script>//... </script> 外…

淘宝NPM镜像地址https://registry.npm.taobao.org不可用

1 地址已经更新了,https://registry.npm.taobao.org已经停服2 新地址是 https://registry.npmmirror.com

星星充电一面

1、你是否了解ThreadLocal吗 2、如果有父线程和子线程,那么子线程是否能访问到父线程ThreadLocal里面的内容吗 3、那你的项目中只是一个单体项目吗,没有子线程?那如果我想要子线程访问父线程里面的内容怎么办 4、布…

6 CF1034 div3 题解

CF1034 div3 打了一下虚拟赛,感觉自己写代码不够认真,前面三个题都是能秒的,结果还寄了几发 这波直接写不会的题的题解吧,节省时间 F 题面 给定一个 \(n\) ,对于一个长度为 \(n\) 的排列,称满足下面条件的排列为…

5 ABC413 题解

ABC 413 题解 D 题面 给定一个长度为 \(N\) 的整数序列 \(A=(A_1,A_2,\ldots,A_N)\) 。 保证对于任何 \(i\ (1\le i\le N)\) , \(A_i\) 不为 \(0\) 。 判断是否存在 \(A\) 的一个排列 \(B=(B_1,B_2,\ldots,B_N)\) 使得…

4 CF 1032 div3 题解

31 CF 1032 div3 题解 C 题面 给你一个行数为 \(n\) 列数为 \(m\) 的整数矩阵。在第 \(i\) 行和第 \(j\) 列的交叉处的单元格中包含数字 \(a_{ij}\) 。 您可以执行以下操作次:选择两个数字 \(1 \leq r \leq n\) 和 \(…

3 ABC411 C ~ E题解

ABC411 C~E 题解 又是赤石的一天 C 有个长度为 \(N\) 的序列,初始序列中每个数为0 每次操作给定 \(pos\) ,将 pos^1 ,然后输出序列中有多少段不连续的 1 用小样例模拟一下可得,设当前颜色为 \(b\) ,左边颜色为 \(…

9 ABC408 D~F 题解

ABC408 D~F 题解 D 题面 给定一个长度为 \(n\) 的由 01 组成的字符串 \(S\),每次操作可以将某个 0 改成 1,或者将某个 1 改成 0 。 求字符串中至多有一个连续 1 串的最小操作次数。 题解 解法1 考场思路,将每个连续…

8 ABC425 G 题解

ABC425 G 题面 给定两个正整数 \(N,M\) 以及一个长度为 \(N\) 的非负整数序列 \(A = A_1, A_2, ..., A_N\)。求 \[\sum_{x = 0}^{M - 1} \min_{1 \le i \le N} (x \oplus A_i) \]\(1 \le N \le 2 \times 10^5\) \(1 \l…

智能防御,安全赋能:AI-FOCUS 滤海AI DLP 化解外部 AI 风险

在“员工把数据投喂给第三方AI”的常见场景下,企业需要一款可在输入与上传瞬时介入的产品。AI-FOCUS 滤海AI DLP 以流式网关为核心,在用户向大模型输入文本与提交文件/图片时进行敏感数据识别,按风险等级执行放行、…