Dashboard - 2023 (ICPC) Jiangxi Provincial Contest -- Official Contest - Codeforces
2023年江西省ICPC省赛部分题解_NIT最帅的博客-CSDN博客
*考虑异或性质,一个数异或两次相当于不变
*快读
错解:建树更新深度
- #include
- using namespace std;
- const int N=5e5+5;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<int,int> pi;
- const ll mod=1e9+7;
-
- int n,q,x,y,op,w;
- int fa[N];
- int v[N];
- int d[N];
- map
int>mp; - vector<int>edge[N];
- void getd(int x,int de){
- d[x]=de;
- for(auto i:edge[x]){
- if(i!=fa[x]){
- fa[i]=x;
- v[i]=mp[{i,x}];
- getd(i,de+1);
- }
- }
- }
- void solve1(int x,int y,int w){
- if(x==y)return;
- if(d[x]>d[y]){
- v[x]^=w;
- solve1(fa[x],y,w);
- }
- else if(d[x]
- v[y]^=w;
- solve1(x,fa[y],w);
- }
- else {
- v[x]^=w,v[y]^=w;
- solve1(fa[x],fa[y],w);
- }
- }
- void solve2(int x){
- //printf("x%d\n",x);
- int res=0;
- for(auto i:edge[x]){
- if(i!=fa[x])res^=v[i];
- //printf("res%lld i%d\n",res,i);
- }res^=v[x];
-
- //if(x!=1)res^=fa[x];
- printf("%d\n",res);
- }
- int main(){
- scanf("%d%d",&n,&q);
- for(int i=1;i
- scanf("%d%d%d",&x,&y,&w);
- //v[{x,y}]=w;
- //if(x>y)swap(x,y);
- edge[x].push_back(y);
- edge[y].push_back(x);
- //fa[y]=x,v[y]=w;
- mp[{x,y}]=w;
- mp[{y,x}]=w;
- }fa[1]=-1;
- getd(1,1);
- //for(int i=1;i<=n;i++)printf("i%d d%d\n",i,d[i]);
- while(q--){
- scanf("%d",&op);
- if(op==1){
- scanf("%d%d%d",&x,&y,&w);
- if(w==0)continue;
- solve1(x,y,w);
- }else{
- scanf("%d",&x);
- solve2(x);
- }
- }
- return 0;
- }
正解:直接记录每个点周围边的异或值,op1只改变x,y两个点
- #include
- using namespace std;
- const int N=5e5+5;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<int,int> pi;
- const int inf=1<<30;
- const ll mod=1e9+7;
- inline void read(int &x){
- int f=1;
- x=0;
- char ch=getchar();
- while(ch<'0'||'9'
- if(ch=='-')f=-1;
- ch=getchar();
- }while('0'<=ch&&ch<='9'){
- x=(x<<3)+(x<<1)+(ch&15);
- ch=getchar();
- }x*=f;
- }
- int n,q,x,y,op,w;
- int ans[N];
-
- int main(){
- read(n);read(q);
- for(int i=1;i
- read(x);read(y);read(w);
- ans[x]^=w;ans[y]^=w;
- }
- while(q--){
- read(op);
- if(op==1){
- read(x);read(y);read(w);
- if(w==0)continue;
- ans[x]^=w,ans[y]^=w;
- }else{
- read(x);
- printf("%d\n",ans[x]);
- }
- }
- return 0;
- }
-
相关阅读:
cf #832 Div.2(A-D)
这 30 个常用的 Maven 命令你必须熟悉!
vue模板语法上集->插值,指令,过滤器,计算属性&监听属性,vue购物车
11┃音视频直播系统之 WebRTC 进行文本聊天并实时传输文件
二维平面装箱问题的常用工具
阿里云刘洋:基于eBPF的Kubernetes可观测最佳实践
[附源码]java毕业设计干果在线销售系统设计
数字签字那些事+ca数字证书
穿越时空的创新:解析云原生与Web3.0的奇妙渊源
【python第三方库】easydict的使用
-
原文地址:https://blog.csdn.net/m0_63851154/article/details/133487969