Submission #895769

#TimeUsernameProblemLanguageResultExecution timeMemory
895769abcvuitunggioFlood (IOI07_flood)C++17
100 / 100
58 ms13016 KiB
#include <bits/stdc++.h> using namespace std; int n,w,x[100001],y[100001],a[200001],b[200001],nxt[100001][4],dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},p[400001],l[100001],mx[100001]; vector <int> safe; vector <pair <int, int>> q[100005]; int f(int i){ return (l[i]==i?i:l[i]=f(l[i])); } int main(){ ios_base::sync_with_stdio(NULL);cin.tie(nullptr); cin >> n; iota(l,l+n+1,0); for (int i=1;i<=n;i++) cin >> x[i] >> y[i]; cin >> w; for (int i=1;i<=w;i++){ cin >> a[i] >> b[i]; l[f(a[i])]=f(b[i]); for (int j=0;j<4;j++) if (abs(dx[j])+abs(x[a[i]]+dx[j]-x[b[i]])==abs(x[a[i]]-x[b[i]])&&abs(dy[j])+abs(y[a[i]]+dy[j]-y[b[i]])==abs(y[a[i]]-y[b[i]])){ nxt[a[i]][j]=i; nxt[b[i]][(j+2)%4]=i+w; break; } } for (int i=1;i<=n;i++){ int j=f(i); if (!mx[j]||x[mx[j]]>x[i]||(x[mx[j]]==x[i]&&y[mx[j]]<y[i])) mx[j]=i; } for (int i=1;i<=n;i++) if (i==f(i)) for (int j=0;j<4;j++) if (nxt[mx[i]][(j+3)%4]){ q[1].push_back({nxt[mx[i]][(j+3)%4],(j+3)%4}); break; } for (int i=1;i<n+5;i++) while (!q[i].empty()){ auto [u,d]=q[i].back(); q[i].pop_back(); if (p[u]) continue; p[u]=i; q[i+1].push_back({(u>w?u-w:u+w),(d+2)%4}); int cur=(u>w?a[u-w]:b[u]); for (int j=0;j<4;j++) if (nxt[cur][(d+j+3)%4]){ int v=nxt[cur][(d+j+3)%4]; q[i].push_back({v,(d+j+3)%4}); break; } } for (int i=1;i<=w;i++) if (p[i]==p[i+w]) safe.push_back(i); cout << safe.size() << '\n'; for (int i:safe) 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...