#include <bits/stdc++.h>
using namespace std;
map<pair<int,int>,bool>scr;
bool check(int x,int y)
{
int ans=0;
for (int i=-1;i<=1;i++)
{
for (int j=-1;j<=1;j++)
{
if (i!=0&&j!=0) continue;
if (i==0&&j==0) continue;
pair<int,int>f={x+i,y+j};
if (scr.find(f)==scr.end())
ans++;
}
}
return (ans<=1);
}
inline void solve()
{
int n,t;
cin>>n>>t;
int r[n],c[n];
map<pair<int,int>,int>pre,ind;
for (int i=0;i<n;i++)
{
cin>>r[i]>>c[i];
pre[{r[i],c[i]}]=1;
ind[{r[i],c[i]}]=i+1;
}
pair<int,int>cur={r[0],c[0]};
vector<int>ans;
set<pair<int,pair<int,int>>>S,pri;
S.insert({ind[cur],cur});
while (S.size()||pri.size())
{
pair<int,pair<int,int>>ft;
if (pri.size())
{
ft=*begin(pri);
pri.erase(ft);
}
else
{
ft=*begin(S);
S.erase(ft);
}
pair<int,int>g=ft.second;
if (pre[g]==0) continue;
pre[g]=0;
scr[g]=1;
ans.push_back(ft.first);
for (int i=-1;i<=1;i++)
{
for (int j=-1;j<=1;j++)
{
pair<int,int>f={g.first+i,g.second+j};
if (pre[f])
{
if (check(f.first,f.second))
pri.insert({ind[f],f});
else
S.insert({ind[f],f});
}
}
}
}
if (ans.size()!=n)
{
cout<<"NO\n";return;
}
cout<<"YES\n";
for (auto i:ans)
cout<<i<<'\n';
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int t=1;
for (int i=1;i<=t;i++)
{
solve();
}
}
| # | 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... |