답안 #750682

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
750682 2023-05-30T06:26:55 Z mars4 Regions (IOI09_regions) C++17
100 / 100
3432 ms 124768 KB
#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 ff              first
#define ss              second
#define ll              int
#define ld              long double
#define nl              cout<<"\n"
#define i128            __int128_t
#define all(v)          v.begin(),v.end()
#define mset(a,v)       memset((a),(v),sizeof(a))
#define forn(i,a,b)     for(int64_t i=int64_t(a);i<int64_t(b);++i)
#define forb(i,a,b)     for(int64_t i=int64_t(a);i>=int64_t(b);--i)
#define fastio()        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define mod         1'000'000'007
#define mod2        998'244'353 
#define inf         1'000'000'000'000'007
#define pi          3.14159265358979323846

template<class key,class cmp=std::less<key>>
using ordered_set=tree<key,null_type,cmp,rb_tree_tag,tree_order_statistics_node_update>;

template<class L,class R> ostream& operator<<(ostream& out,pair<L,R> &p)        {return out<<"("<<p.ff<<", "<<p.ss<<")";}
template<class T> ostream& operator<<(ostream& out,vector<T> &v)                {out<<"[";for(auto it=v.begin();it!=v.end();++it){if(it!=v.begin())out<<", ";out<<*it;}return out<<"]";}
template<class T> ostream& operator<<(ostream& out,deque<T> &v)                 {out<<"[";for(auto it=v.begin();it!=v.end();++it){if(it!=v.begin())out<<", ";out<<*it;}return out<<"]";}
template<class T> ostream& operator<<(ostream& out,set<T> &s)                   {out<<"{";for(auto it=s.begin();it!=s.end();++it){if(it!=s.begin())out<<", ";out<<*it;}return out<<"}";}
template<class T> ostream& operator<<(ostream& out,ordered_set<T> &s)           {out<<"{";for(auto it=s.begin();it!=s.end();++it){if(it!=s.begin())out<<", ";out<<*it;}return out<<"}";}
template<class L,class R> ostream& operator<<(ostream& out,map<L,R> &m)         {out<<"{";for(auto it=m.begin();it!=m.end();++it){if(it!=m.begin())out<<", ";out<<*it;}return out<<"}";}

void dbg_out() {cerr<<"]\n";}
template<typename Head,typename... Tail> 
void dbg_out(Head H,Tail... T) {cerr<<H;if(sizeof...(Tail))cerr<<", ";dbg_out(T...);}
#ifdef LOCAL
#define dbg(...) cerr<<"["<<#__VA_ARGS__<<"] = [",dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

//---------------------------------mars4---------------------------------

vector<vector<ll>> v;
vector<vector<ll>> g;
vector<vector<ll>> vst;
vector<ll> regions;
vector<ll> st;
vector<ll> ed;
vector<ll> dfs_cnt;
vector<ll> eregions;
vector<ll> ind;
const ll B=200;
ll timer=-1;

void dfs(ll cur)
{
	timer++;
	st[cur]=timer;
	vst[regions[cur]].push_back(st[cur]);
	for(ll r:eregions)
	{
		g[ind[r]][regions[cur]]+=dfs_cnt[r];
	}
	dfs_cnt[regions[cur]]++;
	for(ll nxt:v[cur])
	{
		dfs(nxt);
	}
	dfs_cnt[regions[cur]]--;
	ed[cur]=timer;
}

int main()
{
	/* fastio(); */
	ll z,n,m,t,k,i,j,l,d,h,r;
	ll q;
	ll root_region;
	cin>>n>>m>>q;
	ll sz=(n+B-1)/B;
	v=vector<vector<ll>>(n);
	vst=vector<vector<ll>>(m);
	g=vector<vector<ll>>(sz,vector<ll>(m));
	regions=vector<ll>(n);
	st=vector<ll>(n);
	ed=vector<ll>(n);
	dfs_cnt=vector<ll>(m);
	ind=vector<ll>(m);
	vector<ll> cnt(m);
	vector<vector<ll>> employee_region(m);
	cin>>root_region;
	root_region--;
	regions[0]=root_region;
	employee_region[root_region].push_back(0);
	forn(i,1,n)
	{
		cin>>l>>r;
		l--,r--;
		v[l].push_back(i);
		regions[i]=r;
		employee_region[r].push_back(i);
		cnt[r]++;
	}
	forn(i,0,m)
	{
		if(cnt[i]>=B)
		{
			ind[i]=(ll)eregions.size();
			eregions.push_back(i);
		}
	}
	dfs(0);
	while(q--)
	{
		cin>>l>>r;
		l--,r--;
		ll res=0;
		if(cnt[l]>=B)
		{
			res=g[ind[l]][r];
		}
		else
		{
			for(ll i:employee_region[l])
			{
				res+=upper_bound(all(vst[r]),ed[i])-lower_bound(all(vst[r]),st[i]);
			}
		}
		cout<<res<<endl;
	}
	cerr<<"\nTime elapsed: "<<1000*clock()/CLOCKS_PER_SEC<<"ms\n";
	return 0;
}

Compilation message

regions.cpp: In function 'int main()':
regions.cpp:79:5: warning: unused variable 'z' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |     ^
regions.cpp:79:11: warning: unused variable 't' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |           ^
regions.cpp:79:13: warning: unused variable 'k' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |             ^
regions.cpp:79:15: warning: unused variable 'i' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |               ^
regions.cpp:79:17: warning: unused variable 'j' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                 ^
regions.cpp:79:21: warning: unused variable 'd' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                     ^
regions.cpp:79:23: warning: unused variable 'h' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                       ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 208 KB Output is correct
2 Correct 1 ms 208 KB Output is correct
3 Correct 1 ms 300 KB Output is correct
4 Correct 6 ms 208 KB Output is correct
5 Correct 8 ms 336 KB Output is correct
6 Correct 18 ms 336 KB Output is correct
7 Correct 28 ms 408 KB Output is correct
8 Correct 34 ms 476 KB Output is correct
9 Correct 42 ms 976 KB Output is correct
10 Correct 57 ms 1184 KB Output is correct
11 Correct 125 ms 1488 KB Output is correct
12 Correct 157 ms 2312 KB Output is correct
13 Correct 150 ms 2068 KB Output is correct
14 Correct 260 ms 2756 KB Output is correct
15 Correct 260 ms 5608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1306 ms 7024 KB Output is correct
2 Correct 853 ms 6056 KB Output is correct
3 Correct 1477 ms 9356 KB Output is correct
4 Correct 300 ms 5296 KB Output is correct
5 Correct 394 ms 8384 KB Output is correct
6 Correct 610 ms 11980 KB Output is correct
7 Correct 1211 ms 20228 KB Output is correct
8 Correct 1143 ms 31796 KB Output is correct
9 Correct 2065 ms 58236 KB Output is correct
10 Correct 3020 ms 103372 KB Output is correct
11 Correct 3432 ms 113668 KB Output is correct
12 Correct 1897 ms 75908 KB Output is correct
13 Correct 2257 ms 76168 KB Output is correct
14 Correct 2297 ms 95220 KB Output is correct
15 Correct 3223 ms 119456 KB Output is correct
16 Correct 3150 ms 124768 KB Output is correct
17 Correct 2954 ms 103700 KB Output is correct