Submission #1020607

#TimeUsernameProblemLanguageResultExecution timeMemory
1020607vjudge1Flood (IOI07_flood)C++17
100 / 100
191 ms31684 KiB
#include<bits/stdc++.h> using namespace std; int X[100100],Y[100100],lev[400100],side[100100][4][2],Xof[400100]; bitset<400100>vis; vector<int> adj[400100]; void AE(int a,int b){ adj[a].push_back(b); adj[b].push_back(a); } set<pair<int,int>>st; int main(){ cin.tie(0)->sync_with_stdio(0); int n,w; cin>>n; for(int i=1;i<=n;i++) cin>>X[i]>>Y[i]; cin>>w; for(int i=1;i<=w;i++){ int a,b; cin>>a>>b; if(X[a]==X[b]){ if(Y[a]>Y[b])swap(a,b); side[a][2][1]=i; side[a][2][0]=i+w; side[b][0][0]=i; side[b][0][1]=i+w; Xof[i]=X[a]; st.insert({Xof[i],i}); } else { if(X[a]>X[b])swap(a,b); side[a][1][0]=i; side[a][1][1]=i+w; side[b][3][1]=i; side[b][3][0]=i+w; Xof[i]=1e9; } } for(int i=1;i<=n;i++) for(int j=0;j<4;j++) if(side[i][j][1]) for(int k=(j+1)%4;;k=(k+1)%4) if(side[i][k][0]){ AE(side[i][k][0],side[i][j][1]);break;} deque<int>Q; memset(lev,7,sizeof lev); while(1){ if(st.empty())break; int K=st.begin()->second; Q.push_back(K); lev[K]=0; while(Q.size()){ int x=Q.front();Q.pop_front(); if(vis[x])continue; if(x<=w)st.erase({Xof[x],x}); vis[x]=1; for(auto y:adj[x]) if(lev[y]>lev[x]) Q.push_front(y),lev[y]=lev[x]; adj[x].clear(); int k=(x>w?x-w:x+w); if(lev[k]>lev[x]+1) lev[k]=lev[x]+1,Q.push_back(k); } } vector<int>v; for(int i=1;i<=w;i++) if(lev[i]==lev[i+w]) v.push_back(i); cout<<v.size()<<'\n'; for(auto i:v) cout<<i<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...