Submission #1280571

#TimeUsernameProblemLanguageResultExecution timeMemory
1280571coderg300711Flood (IOI07_flood)C++20
0 / 100
160 ms25920 KiB
#include <bits/stdc++.h> using namespace std; const int N=100100; int X[N],Y[N],lev[N*4],side[N][4][2],vals[4*N]; bitset<4*N> vis; vector<int> adj[4*N]; void AE(int a,int b){ adj[a].push_back(b); adj[b].push_back(a); } set<pair<int,int>> st; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(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; vals[i]=X[a]; st.insert({vals[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; vals[i]=1e9; } } for(int i=1;i<=n;i++) for(int j=0;j<4;j++)if(side[i][j][0]) 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({vals[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> a; for(int i=1;i<=w;i++){ if(lev[i]==lev[i+w])a.push_back(i); } cout<<a.size()<<'\n'; for(auto x:a)cout<<x<<'\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...