Submission #1158612

#TimeUsernameProblemLanguageResultExecution timeMemory
1158612alexander707070Furniture (JOI20_furniture)C++20
0 / 100
1 ms836 KiB
#include<bits/stdc++.h> #define MAXN 1007 using namespace std; int n,m,x,y,qs; int t[MAXN][MAXN]; bool vis[MAXN][MAXN]; int parent[MAXN*MAXN]; bool ans[MAXN*MAXN]; int val(int x){ return t[(x-1)/m+1][(x-1)%m+1]; } int coor(int x,int y){ return (x-1)*m+y; } bool bigger(int a,int b){ if(val(a)==0)a=parent[a]; if(val(b)==0)b=parent[b]; vector<int> l,r; while(a!=1){ l.push_back(val(a)); a=parent[a]; } while(b!=1){ r.push_back(val(b)); b=parent[b]; } while(!l.empty() and !r.empty() and l.back()==r.back()){ l.pop_back(); r.pop_back(); } if(l.empty() or (!r.empty() and l.back()>r.back()))return true; return false; } void recur(int x){ while(x!=1){ ans[val(x)]=false; x=parent[x]; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ for(int f=1;f<=m;f++){ cin>>t[i][f]; t[i][f]=-t[i][f]; } } cin>>qs; for(int i=1;i<=qs;i++){ cin>>x>>y; t[x][y]=i; ans[i]=true; } for(int i=1;i<=n;i++){ for(int f=1;f<=m;f++){ if(i==1 and f==1){ parent[1]=1; continue; } if(t[i][f]==-1)continue; if((i==1 or parent[coor(i-1,f)]==0) and (f==1 or parent[coor(i,f-1)]==0))continue; if(i==1 or parent[coor(i-1,f)]==0){ if(t[i][f-1]==0)parent[coor(i,f)]=parent[coor(i,f-1)]; else parent[coor(i,f)]=coor(i,f-1); continue; } if(f==1 or parent[coor(i,f-1)]==0){ if(t[i-1][f]==0)parent[coor(i,f)]=parent[coor(i-1,f)]; else parent[coor(i,f)]=coor(i-1,f); continue; } if(bigger( coor(i-1,f) , coor(i,f-1) )){ if(t[i-1][f]==0)parent[coor(i,f)]=parent[coor(i-1,f)]; else parent[coor(i,f)]=coor(i-1,f); }else{ if(t[i][f-1]==0)parent[coor(i,f)]=parent[coor(i,f-1)]; else parent[coor(i,f)]=coor(i,f-1); } } } recur(coor(n,m)); for(int i=1;i<=qs;i++){ cout<<ans[i]<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...