提交时间:2023-08-14 12:22:36
运行 ID: 98148
#include<bits/stdc++.h> using namespace std; const int MX=2e5+10; int fx[MX],fy[MX],n,m; int ans[200][200],x[MX],y[MX]; struct ask{ int op,a,b,c,d; }in[MX]; bool ok1=1; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; struct node{ int x,y,dis; }; queue<node>q; bool vis[200][200]; int bfs(int a,int b,int c,int d){ while(q.size()){ node u=q.front(); vis[u.x][u.y]=0; q.pop(); } q.push(node{a,b,0});vis[a][b]=1; while(q.size()){ node u=q.front();q.pop();vis[u.x][u.y]=0; for(int i=0;i<4;i++){ int px=u.x+dx[i],py=u.y+dy[i]; if(px<1||px>n||py<1||py>n||vis[px][py]) continue; if(max(px,py)==max(u.x,u.y)||(px==u.x&&fy[px])||(py==u.y&&fx[py])){ if(px==c&&py==d) return u.dis+1; vis[px][py]=1; q.push(node{px,py,u.dis+1}); } } } } int main(){ ios::sync_with_stdio(0); cin>>n>>m; for(int i=1;i<=n-1;i++){ cin>>x[i]>>y[i]; fx[x[i]]++;fy[y[i]]++; if(x[i]!=y[i]) ok1=0; } for(int i=1;i<=m;i++){ cin>>in[i].op; if(in[i].op==1){ cin>>in[i].a>>in[i].b>>in[i].c; if(in[i].b!=in[i].c) ok1=0; } else { cin>>in[i].a>>in[i].b>>in[i].c>>in[i].d; } } if(ok1){ for(int i=1;i<=m;i++){ if(in[i].op==2){ cout<<abs(in[i].a-in[i].c)+abs(in[i].b-in[i].d)<<'\n'; } } return 0; } else{ for(int i=1;i<=m;i++){ if(in[i].op==1){ int id=in[i].a; fx[x[id]]--;fy[y[id]]--; x[id]=in[i].b,y[id]=in[i].c; fx[x[id]]++;fy[y[id]]++; } else cout<<bfs(in[i].a,in[i].b,in[i].c,in[i].d)<<'\n'; } } return 0; }