Submission #1722189
Source Code Expand
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define fi first #define se second #define mp make_pair #define pb push_back #define fbo find_by_order #define ook order_of_key typedef long long ll; typedef pair<ll,ll> ii; typedef vector<int> vi; typedef long double ld; typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; typedef set<int>::iterator sit; typedef map<int,int>::iterator mit; typedef vector<int>::iterator vit; const int MOD=1e9+7; ll fact[200001]; ll ifact[200001]; ll mult(ll a, ll b) { return (a*b)%MOD; } ll modpow(ll a, ll b) { ll r=1; while(b) { if(b&1) r=(r*a)%MOD; a=(a*a)%MOD; b>>=1; } return r; } ll inv(ll a) { return modpow(a,MOD-2); } map<int,int> dsu[200001]; int par[200001]; int rt(int u) { if(par[u]<0) return u; return (par[u]=rt(par[u])); } void merge(int u, int v) { u=rt(u);v=rt(v); if(u==v) return ; if(dsu[u].size()<dsu[v].size()) swap(u,v); for(mit it = dsu[v].begin();it!=dsu[v].end();it++) { dsu[u][it->fi]+=it->se; } par[v]=u; //par[u]=-1; } ll solve(int x) { if(x!=rt(x)) return 1; ll tot = 0; ll ans = 1; for(mit it = dsu[x].begin();it!=dsu[x].end();it++) { //cerr<<it->fi<<' '<<it->se<<'\n'; tot+=it->se; ans=(ans*ifact[it->se])%MOD; } ans=mult(ans,fact[tot]); return ans; } vector<ii> adj[200001]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); fact[0]=1;ifact[0]=1; for(int i=1;i<=200000;i++) { fact[i]=mult(fact[i-1],i); ifact[i]=inv(fact[i]); } memset(par,-1,sizeof(par)); int n; cin>>n; ll a,b;cin>>a>>b; vector<pair<ii,int> > vec; for(int i=0;i<n;i++) { int x,y; cin>>x>>y; x--; adj[x].pb(mp(y,i)); vec.pb(mp(mp(y,x),i)); dsu[i][x]++; } sort(vec.begin(),vec.end()); for(int i=0;i<n;i++) { sort(adj[i].begin(),adj[i].end()); for(int j=1;j<adj[i].size();j++) { if(adj[i][0].fi+adj[i][j].fi<=a) { //cerr<<adj[i][0].se<<' '<<adj[i][j].se<<'\n'; merge(adj[i][0].se,adj[i][j].se); } } } for(int i=0;i<n;i++) { if(vec[0].fi.se!=vec[i].fi.se&&vec[0].fi.fi+vec[i].fi.fi<=b) { //cerr<<vec[0].se<<' '<<vec[i].se<<'\n'; merge(vec[0].se,vec[i].se); } } int ptr=0; while(ptr<n&&vec[0].fi.se==vec[ptr].fi.se) ptr++; if(ptr<n) { for(int i=0;i<n;i++) { if(vec[ptr].fi.se!=vec[i].fi.se&&vec[ptr].fi.fi+vec[i].fi.fi<=b) { //cerr<<vec[ptr].se<<' '<<vec[i].se<<'\n'; merge(vec[ptr].se,vec[i].se); } } } ll ans = 1; for(int i=0;i<n;i++) { ans=mult(ans,solve(i)); } cout<<ans<<'\n'; }
Submission Info
Submission Time | |
---|---|
Task | D - Colorful Balls |
User | vjudge2 |
Language | C++14 (GCC 5.4.1) |
Score | 1000 |
Code Size | 2629 Byte |
Status | AC |
Exec Time | 280 ms |
Memory | 45100 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1000 / 1000 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 00_example_01.txt, 00_example_02.txt, 00_example_03.txt |
All | 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, 49.txt, 50.txt, 51.txt, 52.txt, 53.txt, 54.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_example_01.txt | AC | 40 ms | 18176 KB |
00_example_02.txt | AC | 40 ms | 18176 KB |
00_example_03.txt | AC | 39 ms | 18176 KB |
01.txt | AC | 40 ms | 18304 KB |
02.txt | AC | 40 ms | 18304 KB |
03.txt | AC | 44 ms | 19072 KB |
04.txt | AC | 40 ms | 18176 KB |
05.txt | AC | 41 ms | 18560 KB |
06.txt | AC | 40 ms | 18304 KB |
07.txt | AC | 112 ms | 28976 KB |
08.txt | AC | 40 ms | 18304 KB |
09.txt | AC | 70 ms | 23988 KB |
10.txt | AC | 59 ms | 22200 KB |
11.txt | AC | 40 ms | 18304 KB |
12.txt | AC | 40 ms | 18304 KB |
13.txt | AC | 45 ms | 19200 KB |
14.txt | AC | 40 ms | 18304 KB |
15.txt | AC | 69 ms | 23348 KB |
16.txt | AC | 100 ms | 28976 KB |
17.txt | AC | 49 ms | 19900 KB |
18.txt | AC | 61 ms | 22580 KB |
19.txt | AC | 94 ms | 27696 KB |
20.txt | AC | 219 ms | 41260 KB |
21.txt | AC | 219 ms | 41004 KB |
22.txt | AC | 190 ms | 38828 KB |
23.txt | AC | 270 ms | 43564 KB |
24.txt | AC | 189 ms | 39852 KB |
25.txt | AC | 222 ms | 41516 KB |
26.txt | AC | 280 ms | 43052 KB |
27.txt | AC | 184 ms | 38188 KB |
28.txt | AC | 266 ms | 43052 KB |
29.txt | AC | 244 ms | 42284 KB |
30.txt | AC | 170 ms | 38316 KB |
31.txt | AC | 276 ms | 44076 KB |
32.txt | AC | 189 ms | 39852 KB |
33.txt | AC | 263 ms | 44204 KB |
34.txt | AC | 238 ms | 44716 KB |
35.txt | AC | 159 ms | 37036 KB |
36.txt | AC | 180 ms | 38572 KB |
37.txt | AC | 164 ms | 36652 KB |
38.txt | AC | 159 ms | 36652 KB |
39.txt | AC | 189 ms | 36780 KB |
40.txt | AC | 247 ms | 45100 KB |
41.txt | AC | 204 ms | 41516 KB |
42.txt | AC | 208 ms | 42412 KB |
43.txt | AC | 171 ms | 39212 KB |
44.txt | AC | 263 ms | 43820 KB |
45.txt | AC | 169 ms | 39724 KB |
46.txt | AC | 210 ms | 41260 KB |
47.txt | AC | 149 ms | 35480 KB |
48.txt | AC | 144 ms | 36760 KB |
49.txt | AC | 150 ms | 36376 KB |
50.txt | AC | 146 ms | 38940 KB |
51.txt | AC | 117 ms | 38044 KB |
52.txt | AC | 139 ms | 35996 KB |
53.txt | AC | 139 ms | 35996 KB |
54.txt | AC | 138 ms | 35996 KB |