답안 #739542

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
739542 2023-05-10T15:22:03 Z Zflop Regions (IOI09_regions) C++14
1 / 100
4430 ms 131072 KB
#include <bits/stdc++.h>
using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
 
/*
ID: 10002181
LANG: C++
TASK: lamps
*/
 
using str = string; // yay python!
using ld = long double; // or double, if TL is tight
using ll = long long;
using int64 = ll;
using db = double;
using ull = unsigned long long;
#define int ll
 
#define ch() getchar()
#define pc(x) putchar(x)
#define tcT template<class T
#define tcTU tcT, class U
tcT> using V = vector<T>;
tcT, size_t SZ> using AR = array<T,SZ>;
using vi = V<int>;
using vb = V<bool>;
using vpi = V<pair<int,int>>;
using vvi = V<vi>;
using vl = V<ll>;
using vd = V<ld>;
using vstr = V<str>;
 
#define all(x) begin(x), end(x)
#define sor(x) sort(all(x))
#define rev(x) reverse(all(x))
#define sz(x) (int)(x).size()
#define rall(x) x.rbegin(), x.rend()
#define AR array
 
// loops
#define F0R(i, a, b) for (int i=a; i<b;++i)
#define FOR(i, a) for (int i=0; i<a;++i)
#define FORn(i, a) for (int i=1; i<=a;++i)
#define ROF(i,a) for(int i=a-1; i >= 0;--i)
#define R0F(i,a,b) for(int i=a; i > b;--i)
#define ROFn(i,a) for(int i=a; i > 0;--i)
#define rep(a) FOR(_, a)
#define trav(i,x) for(auto& i:x)
 
// pairs
#define mp make_pair
#define pi pair <int, int>
#define f first
#define s second
 
// vectors
#define lb lower_bound
#define ub upper_bound
#define SUM(v) accumulate(all(v), 0LL)
#define MN(v) *min_element(all(v))
#define MX(v) *max_element(all(v))
#define UNIQUE(a) (a).erase(unique((a).begin(),(a).end()),(a).end())
#define eb emplace_back
#define ft front()
#define bk back()
#define ins insert
#define pf push_front
#define pb push_back
#define emt empty()
#define rsz resize
 
#define pob pop_back()
#define pof pop_front()
 
#define ts to_string
 
#define setIO()  ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
 
ll MOD = 1e9+7;
const ll MAX = 100000000000;
const ll INF = 1e18; // not too close to LLONG_MAX
const ld PI = acos((ld)-1);
 
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
 
const int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1}; // for every grid problem!!
 
tcT> bool ckmin(T& a, const T& b) {
	return b < a ? a = b, 1 : 0; } // set a = min(a,b)
tcT> bool ckmax(T& a, const T& b) {
	return a < b ? a = b, 1 : 0; }
 
tcTU> T fstTrue(T lo, T hi, U f) {
	hi ++; assert(lo <= hi); // assuming f is increasing
	while (lo < hi) { // find first index such that f is true
		T mid = lo+(hi-lo)/2;
		f(mid) ? hi = mid : lo = mid+1;
	}
	return lo;
}
tcTU> T lstTrue(T lo, T hi, U f) {
	lo --; assert(lo <= hi); // assuming f is decreasing
	while (lo < hi) { // find first index such that f is true
		T mid = lo+(hi-lo+1)/2;
		f(mid) ? lo = mid : hi = mid-1;
	}
	return lo;
}
 
//INPUT
#define tcTUU tcT, class ...U
tcT> void re(complex<T>& c);
tcTU> void re(pair<T,U>& p);
tcT> void re(V<T>& v);
tcT, size_t SZ> void re(AR<T,SZ>& a);
 
tcT> void re(T& x) { cin >> x; }
void re(db& d) { str t; re(t); d = stod(t); }
void re(ld& d) { str t; re(t); d = stold(t); }
tcTUU> void re(T& t, U&... u) { re(t); re(u...); }
 
tcT> void re(complex<T>& c) { T a,b; re(a,b); c = {a,b}; }
tcTU> void re(pair<T,U>& p) { re(p.f,p.s); }
tcT> void re(V<T>& x) { trav(a,x) re(a); }
tcT> void rv(int n, V<T>& x) { x.rsz(n); re(x); }
 
//OUTPUT
namespace output {
	tcT> void PS(V<T>& x) { FOR(i,sz(x)) cout << x[i] << " \n"[i + 1 == sz(x)];}
	tcT> void W(pair<T,T>& x) { cout << x.f << ' ' << x.s << '\n'; }
	tcT> void PS(bool ok) { if(ok) cout << "YES\n"; else cout << "NO\n"; }
    template<class T1, class T2> void pr(const pair<T1,T2>& x);
    tcT, size_t SZ> void pr(const array<T,SZ>& x);
    tcT> void pr(const vector<T>& x);
    tcT> void pr(const set<T>& x);
    template<class T1, class T2> void pr(const map<T1,T2>& x);
 
    tcT> void pr(const T& x) { cout << x; }
    template<class Arg, class... Args> void pr(const Arg& first, const Args&... rest) {
        pr(first); pr(rest...);
    }
 
    template<class T1, class T2> void pr(const pair<T1,T2>& x) {
        pr("{",x.f,", ",x.s,"}");
    }
    tcT> void prContain(const T& x) {
        pr("{");
        bool fst = 1; trav(a,x) pr(!fst?", ":"",a), fst = 0;
        pr("}");
    }
    tcT, size_t SZ> void pr(const array<T,SZ>& x) { prContain(x); }
    tcT> void pr(const vector<T>& x) { prContain(x); }
    tcT> void pr(const set<T>& x) { prContain(x); }
    template<class T1, class T2> void pr(const map<T1,T2>& x) { prContain(x); }
 
    void ps() { pr("\n"); } // print w/ spaces
    template<class Arg> void ps(const Arg& first) { pr(first,"\n"); }
    template<class Arg, class... Args> void ps(const Arg& first, const Args&... rest) {
        pr(first," "); ps(rest...);
    }
}
 
using namespace output;
/*
template<class T,class V> void add(T& a, const V& b) {
	a = (a + b) % MOD;
	}
template<class T,class V> void sub(T& a, const V& b) {
	a = (a - b + MOD) % MOD;
	}
template<class T,class V> void mult(T& a, const V& b) {
	a = a * b % MOD;
	}
 */
void setF(string fileName = "") {
	ios_base::sync_with_stdio(0); cin.tie(0);
	if((int)fileName.size()) {
		freopen((fileName+".in").c_str(), "r", stdin);
		freopen((fileName+".out").c_str(), "w", stdout);
	}
}


vb bb;
vi SIEVE(int N){ // sieve in O(N logN)
	vi pr;
	bb.rsz(N);
	bb[0] = bb[1] = true;
	vi g(N);
	F0R(i,2,N){
		if(!bb[i]){
			pr.pb(i);
			for (int j = i + i; j < N; j += i) bb[j] = true;
			}
		}
	return pr;
	}
 


template<class T> using ordset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

struct edge{
	int a;
	int b;
	int w;
	};
 
ll POW(ll x, ll y,ll mod){
    ll res = 1LL;
    x %= mod;
    while(y){
        if (y & 1LL)
            res *= x;
        res %= mod;
        x = (x*x) % mod;
        y >>= 1LL;
    }
    return res;
}
 
ll gauss(ll n) { return n * (n + 1ll) / 2; }
 
ll fact(ll x) { if(x) return x * fact(x - 1ll); return 1; }
 
vl fc;
void F(int N,ll MOD){
	fc.rsz(N + 1);
	fc[0] = 1;
	FORn(i,N) fc[i] = fc[i - 1] * i * 1ll % MOD;
	}
	
vl inv;
void I(int N,ll MOD){
	inv.rsz(N + 1);
	inv[N] = POW(fc[N],MOD - 2,MOD);
	for (int i = N; i ;--i) inv[i - 1] = inv[i] * 1ll * i % MOD;
	}
 
ll Cr(ll N,ll K,ll mod){
	if(K < 0) return 0;
	if(K > N) return 0;
	return fc[N] * 1ll * inv[K] % mod * inv[N - K] % mod;
	}
ll Ar(ll N,ll K,ll mod){
	return fc[N] * inv[N - K] % mod;
	}
ll iv(int k,ll MOD){
  return POW(k,MOD-2,MOD);  
}
/*
 scanf("%lld", &testInteger);
 printf("%lld", testInteger);
 
 ____ ____ ____ ____ ____  ____
||f |||l |||o |||p |||p ||||y ||
||__|||__|||__|||__|||__||||__||
|/__\|/__\|/__\|/__\|/__\||/__\|
 
**/
template <class T> class SEG{
  private :
	int n;
	
  public :
	V<T> c;
	void init (int N) {
		n = N;
		c = V<T>(5 * N);
		}
	
	void update(int u,int v,int x,int l,int r){
		if(l == r){
			c[x] = v;
			return;
			}
		int mid = (l + r) / 2;
		if(u <= mid) update(u,v,2 * x + 1,l,mid);
		else update(u,v,2 * x + 2,mid + 1,r);
		c[x] = c[2 * x + 1] + c[2 * x + 2];
		}
	
	void update(int u,int v){
		update(u,v,1,1,n);
		}
	
	ll sm(int l,int r,int x,int lx,int rx){
		if(rx <= r && lx >= l) return c[x];
		if(lx > r || rx < l) return 0;
		int mid = (lx + rx) / 2;
		int f1 = 2 * x + 1;
		int f2 = 2 * x + 2;
		return sm(l,r,f1,lx,mid) + sm(l,r,f2,mid + 1,rx);
		}
	
	ll sm(int l,int r){
		if(r < l) swap(l,r);
		return sm(l,r,1,1,n);
		}
};
vi ad[200000],A,tour,tout,st,reg[25001];
int N,Q,R,t;
map<pi,int>m;
void dfs(int node){
	st[node] = t++;
	tour.pb(node);
	trav(x,ad[node])
		dfs(x);
	tout[node] = t - 1;
	}
void solve(){
	cin >> N >> R >> Q;
	A = tout = st = vi(N + 1);
	cin >> A[1];
	F0R(i,2,N + 1){
		int w; cin >> w >> A[i];
		ad[w].pb(i);
		}
	FORn(i,N) reg[A[i]].pb(i);
	dfs(1);
	
	auto Do = [&] (int region){
		vi pre(sz(tour) + 2);
		FOR(i,sz(tour)){
			if(i)  pre[i] += pre[i - 1];
			if(A[tour[i]] == region){
				pre[i]++;
				pre[tout[tour[i]] + 1]--;
				}
			else m[{region,A[tour[i]]}] += pre[i];
			//ps(i,tour[i]);
			}
		};
	
	FORn(i,R)
		if(sz(reg[i]) * sz(reg[i]) >= N) 
			Do(i);
	
	while(Q--){
		int r1,r2; cin >> r1 >> r2;
		//ps(r1,r2);
		if(sz(reg[r1]) * sz(reg[r1]) >= N){
			cout << m[{r1,r2}] << endl;
			continue;
			}
		int ans = 0;
		trav(x,reg[r1]){
			auto i = ub(all(reg[r2]),st[x]) - reg[r2].begin();
			auto j = ub(all(reg[r2]),tout[x]) - reg[r2].begin();
			ans += j - i;
			}
		cout << ans << endl;
		}
}
main(){   
	setIO();
	solve();
}
// look out for out of bounds arrays
// And more importantly, is y a vowel? Damian:1
// <3 :L ._. <_<
// You have no idea how high I can fly
// code is my poetry

Compilation message

regions.cpp:360:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  360 | main(){
      | ^~~~
regions.cpp: In function 'void setF(std::string)':
regions.cpp:183:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  183 |   freopen((fileName+".in").c_str(), "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:184:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  184 |   freopen((fileName+".out").c_str(), "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5584 KB Output is correct
2 Incorrect 4 ms 5584 KB Output isn't correct
3 Incorrect 4 ms 5584 KB Output isn't correct
4 Incorrect 7 ms 5584 KB Output isn't correct
5 Incorrect 9 ms 5584 KB Output isn't correct
6 Incorrect 10 ms 5584 KB Output isn't correct
7 Incorrect 41 ms 5712 KB Output isn't correct
8 Incorrect 42 ms 5712 KB Output isn't correct
9 Incorrect 48 ms 6288 KB Output isn't correct
10 Incorrect 104 ms 6480 KB Output isn't correct
11 Incorrect 129 ms 6864 KB Output isn't correct
12 Incorrect 159 ms 7504 KB Output isn't correct
13 Incorrect 149 ms 7376 KB Output isn't correct
14 Incorrect 328 ms 8144 KB Output isn't correct
15 Incorrect 258 ms 11008 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1798 ms 12516 KB Output isn't correct
2 Incorrect 1909 ms 11588 KB Output isn't correct
3 Incorrect 2945 ms 14660 KB Output isn't correct
4 Incorrect 294 ms 7924 KB Output isn't correct
5 Incorrect 365 ms 9940 KB Output isn't correct
6 Incorrect 893 ms 32772 KB Output isn't correct
7 Incorrect 1673 ms 42636 KB Output isn't correct
8 Incorrect 2345 ms 79628 KB Output isn't correct
9 Incorrect 2125 ms 18704 KB Output isn't correct
10 Runtime error 1857 ms 131072 KB Execution killed with signal 9
11 Incorrect 4430 ms 19236 KB Output isn't correct
12 Incorrect 1530 ms 22924 KB Output isn't correct
13 Incorrect 1851 ms 23204 KB Output isn't correct
14 Incorrect 2787 ms 44924 KB Output isn't correct
15 Incorrect 3347 ms 28408 KB Output isn't correct
16 Incorrect 3049 ms 33824 KB Output isn't correct
17 Incorrect 3186 ms 54792 KB Output isn't correct