Submission #1020562

#TimeUsernameProblemLanguageResultExecution timeMemory
1020562vjudge1Flood (IOI07_flood)C++17
73 / 100
203 ms40948 KiB
#include<bits/stdc++.h> using namespace std; int X[100100],Y[100100],vis[400100],lev[400100],side[100100][4][2],Xof[400100]; vector<pair<int,bool>> adj[400100]; void AE(int a,int b,int c){ adj[a].push_back({b,c}); adj[b].push_back({a,c}); } 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; } AE(i,i+w,1); } 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],0);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[i,j]:adj[x]) if(lev[i]>lev[x]+j) if(j) Q.push_back(i),lev[i]=lev[x]+1; else Q.push_front(i),lev[i]=lev[x]; } } 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'; }

Compilation message (stderr)

flood.cpp: In function 'int main()':
flood.cpp:55:19: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   55 |                 if(lev[i]>lev[x]+j) if(j)
      |                   ^
#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...