#include<bits/stdc++.h> #define ff first #define ss second #define mp make_pair #define pb push_back using namespace std; typedef long long ll; typedef pair<ll,ll> pp; unordered_set <int> S; vector<pp> v; vector<int> graph[30]; int n,bn; void dfs(int p) { bn|=(1<<p); for(auto I : graph[p]) if(!((bn>>I)&1)) dfs(I); } int main() { scanf("%d",&n); for(int i=0;i<n;++i) { ll a,b; scanf("%lld%lld",&a,&b); v.pb(mp(a,b)); } sort(v.begin(),v.end()); // for(auto I : v) printf("%lld %lld\n",I.ff,I.ss); // printf("\n"); for(int i=0;i<n;++i) { for(int j=i+1;(j<n) && (v[i].ff+v[i].ss>=v[j].ff);++j) { graph[i].pb(j); } for(int j=i-1;(j>=0) && (v[i].ff-v[i].ss<=v[j].ff);--j) { graph[i].pb(j); } } /* for(int i=0;i<n;++i) { for(auto I : graph[i]) { printf("%d ",I); } printf("\n"); } */ for(int mask=0;mask<(1<<n);++mask) { int k=mask; bn=0; for(int i=0;i<n;++i) { if(k&1) if(!((bn>>i)&1)) dfs(i); k>>=1; } S.insert(bn); } printf("%d\n",S.size()); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<bits/stdc++.h> #define ff first #define ss second #define mp make_pair #define pb push_back using namespace std; typedef long long ll; typedef pair<ll,ll> pp; unordered_set <int> S; vector<pp> v; vector<int> graph[30]; int n,bn; void dfs(int p) { bn|=(1<<p); for(auto I : graph[p]) if(!((bn>>I)&1)) dfs(I); } int main() { scanf("%d",&n); for(int i=0;i<n;++i) { ll a,b; scanf("%lld%lld",&a,&b); v.pb(mp(a,b)); } sort(v.begin(),v.end()); // for(auto I : v) printf("%lld %lld\n",I.ff,I.ss); // printf("\n"); for(int i=0;i<n;++i) { for(int j=i+1;(j<n) && (v[i].ff+v[i].ss>=v[j].ff);++j) { graph[i].pb(j); } for(int j=i-1;(j>=0) && (v[i].ff-v[i].ss<=v[j].ff);--j) { graph[i].pb(j); } } /* for(int i=0;i<n;++i) { for(auto I : graph[i]) { printf("%d ",I); } printf("\n"); } */ for(int mask=0;mask<(1<<n);++mask) { int k=mask; bn=0; for(int i=0;i<n;++i) { if(k&1) if(!((bn>>i)&1)) dfs(i); k>>=1; } S.insert(bn); } printf("%d\n",S.size()); } |