Submission #144633

#TimeUsernameProblemLanguageResultExecution timeMemory
144633gs18115Ideal city (IOI12_city)C++14
100 / 100
106 ms16184 KiB
#include<vector> #include<algorithm> #define eb emplace_back #define fi first #define se second #define all(x) (x).begin(),(x).end() using namespace std; typedef long long ll; typedef pair<int,int>pi; typedef pair<ll,ll>pl; const ll inf=1e18; const ll mod=1e9; vector<int>adj[100010]; ll ans; int sz[100010]; int s2[100010]; ll dp[100010]; void dfs(int x,int p) { sz[x]=s2[x]; for(int t:adj[x]) { if(t==p) continue; dfs(t,x); sz[x]+=sz[t]; } dp[x]=sz[x]; for(int t:adj[x]) if(t!=p) ans=(ans+dp[t]*(sz[x]-sz[t]))%mod,dp[x]+=dp[t]; return; } inline void solv(vector<pl>&p) { int n=p.size(); int i; int cnt=0; vector<int>ind; ind.eb(cnt); sort(all(p)); for(i=1;i<n;i++) { if(p[i].fi==p[i-1].fi&&p[i].se==p[i-1].se+1) ind.eb(cnt); else ind.eb(++cnt); } cnt++; for(i=0;i<cnt;i++) s2[i]=0; for(i=0;i<cnt;i++) adj[i].clear(); for(i=0;i<n;i++) s2[ind[i]]++; vector<pair<pl,int> >P; for(i=0;i<n;i++) P.eb(pl(p[i].se,p[i].fi),ind[i]); sort(all(P)); for(i=1;i<n;i++) { pl&t=P[i].fi; pl&s=P[i-1].fi; if(t.fi==s.fi&&t.se==s.se+1) { adj[P[i].se].eb(P[i-1].se); adj[P[i-1].se].eb(P[i].se); } } for(i=0;i<=cnt;i++) { sort(all(adj[i])); adj[i].erase(unique(all(adj[i])),adj[i].end()); } dfs(0,-1); return; } int DistanceSum(int N,int*X,int*Y) { vector<pl>P; int i; for(i=0;i<N;i++) P.eb(X[i],Y[i]); solv(P); P.clear(); for(i=0;i<N;i++) P.eb(Y[i],X[i]); solv(P); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...