| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 647683 | ToroTN | Flood (IOI07_flood) | C++14 | 11 ms | 5076 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define X first
#define Y second
int n,x[1005],y[1005],xx[4005],yy[4005],dx[]={1,1,3,3},dy[]={1,3,1,3};
int m,wall1,wall2,a1,b1,a2,b2,l,r,st=0,d[4005],u,num=0,comp=1;
vector<pair<int,int> > row[20005],column[20005];
vector<pair<int,int> > g[4005];
vector<int> empbrick;
queue<int> q;
map<pair<int,int>,int> mp,mp2;
set<int> s;
set<pair<int,int> > uaytaq;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x[i],&y[i]);
for(int j=0;j<4;j++)
{
uaytaq.insert({2*x[i]+dx[j],2*y[i]+dy[j]});
}
}
for(auto [l,r]:uaytaq)
{
++num;
xx[num]=l;
yy[num]=r;
}
for(int i=1;i<=uaytaq.size();i++)
{
d[i]=1e9;
mp[{xx[i],yy[i]}]=i;
row[xx[i]].pb({yy[i],i});
column[yy[i]].pb({xx[i],i});
}
for(int i=1;i<=2000100;i++)
{
sort(row[i].begin(),row[i].end());
sort(column[i].begin(),column[i].end());
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
s.insert(i);
scanf("%d%d",&wall1,&wall2);
a1=x[wall1];
b1=y[wall1];
a2=x[wall2];
b2=y[wall2];
if(a1>a2)swap(a1,a2);
if(b1>b2)swap(b1,b2);
if(a1<a2)
{
mp2[{mp[{2*a1+3,2*b1+1}],mp[{2*a1+3,2*b1+3}]}]=i;
mp2[{mp[{2*a2+1,2*b2+1}],mp[{2*a2+1,2*b2+3}]}]=i;
}
if(b1<b2)
{
mp2[{mp[{2*a1+1,2*b1+3}],mp[{2*a1+3,2*b1+3}]}]=i;
mp2[{mp[{2*a2+1,2*b2+1}],mp[{2*a2+3,2*b2+1}]}]=i;
}
}
for(int i=0;i<=2000100;i++)
{
for(int j=0;j<(int)row[i].size()-1;j++)
{
l=row[i][j].Y;
r=row[i][j+1].Y;
if(st==0)
{
st=1;
d[l]=0;
q.push(l);
}
g[l].pb({r,max(mp2[{l,r}],mp2[{r,l}])});
g[r].pb({l,max(mp2[{l,r}],mp2[{r,l}])});
}
for(int j=0;j<(int)column[i].size()-1;j++)
{
l=column[i][j].Y;
r=column[i][j+1].Y;
g[l].pb({r,max(mp2[{l,r}],mp2[{r,l}])});
g[r].pb({l,max(mp2[{l,r}],mp2[{r,l}])});
}
}
for(int i=0;;i++)
{
empbrick.clear();
if(comp==uaytaq.size())break;
while(!q.empty())
{
u=q.front();
empbrick.pb(u);
q.pop();
for(auto [node,w]:g[u])
{
if(w==0&&d[node]==1e9)
{
d[node]=d[u];
++comp;
q.push(node);
}
}
}
for(auto ken:empbrick)
{
for(auto [node,w]:g[ken])
{
if(d[node]>d[ken]&&w>0)
{
if(d[node]==1e9)++comp;
d[node]=d[ken]+1;
s.erase(w);
q.push(node);
if(comp==uaytaq.size())break;
}
}
}
}
printf("%d\n",s.size());
for(auto it:s)
{
printf("%d\n",it);
}
printf("\n");
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
