답안 #212734

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
212734 2020-03-24T08:05:14 Z dorijanlendvaj 스파이 (JOI13_spy) C++14
100 / 100
168 ms 17528 KB
//DUEL
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define x first
#define y second
#define pii pair<int,int>
#define pb push_back
#define eb emplace_back
#pragma GCC optimize("unroll-loops")
#define shandom_ruffle(a, b) shuffle(a, b, rng)
#define vi vector<int>
#define vl vector<ll>
#define popcnt __builtin_popcount
#define popcntll __builtin_popcountll
#define all(a) begin(a),end(a)

using namespace std;
using namespace __gnu_pbds;

using ll=long long;
using ull=unsigned long long;
using ld=long double;
int MOD=1000000007;
int MOD2=998244353;
vector<int> bases;
const ll LLINF=1ll<<60;
const char en='\n';

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
void yes() {cout<<"YES"<<en; exit(0);}
void no() {cout<<"NO"<<en; exit(0);}
inline int rund() {int x576363482791fuweh=rng();return abs(x576363482791fuweh)%RAND_MAX;}
template<class T>
void prVec(vector<T> w,bool fl=false)
{
	cout<<w.size()<<en;
	for (int i=0;i<int(w.size())-1;++i) cout<<w[i]<<' ';
	if (w.size()) cout<<w[w.size()-1]<<en;
	if (fl) cout<<flush;
}

void M998()
{
	swap(MOD,MOD2);
}

ll raand()
{
	ll a=rund();
	a*=RAND_MAX;
	a+=rund();
    return a;
}

#define rand raand

ll raaand()
{
	return raand()*(MOD-7)+raand();
}

string to_upper(string a)
{
	for (int i=0;i<(int)a.size();++i) if (a[i]>='a' && a[i]<='z') a[i]-='a'-'A';
	return a;
}

string to_lower(string a)
{
	for (int i=0;i<(int)a.size();++i) if (a[i]>='A' && a[i]<='Z') a[i]+='a'-'A';
	return a;
}

ll sti(string a,int base=10)
{
	ll k=0;
	for (int i=0;i<(int)a.size();++i)
	{
		k*=base;
		k+=a[i]-'0';
	}
	return k;
}

template<class T>
void eras(vector<T>& a,T b)
{
	a.erase(find(a.begin(),a.end(),b));
}

string its(ll k,int base=10)
{
	if (k==0) return "0";
	string a;
	while (k)
	{
		a.push_back((k%base)+'0');
		k/=base;
	}
	reverse(a.begin(),a.end());
	return a;
}

ll min(ll a,int b)
{
	if (a<b) return a;
	return b;
}

ll min(int a,ll b)
{
	if (a<b) return a;
	return b;
}

ll max(ll a,int b)
{
	if (a>b) return a;
	return b;
}

ll max(int a,ll b)
{
	if (a>b) return a;
	return b;
}

ll gcd(ll a,ll b)
{
	if (b==0) return a;
	return gcd(b,a%b);
}

ll lcm(ll a,ll b)
{
	return a/gcd(a,b)*b;
}

template<class T,class K>
pair<T,K> mp(T a,K b)
{
	return make_pair(a,b);
}

inline int mult(ll a,ll b)
{
	return (a*b)%MOD;
}

inline int pot(int n,int k)
{
	if (k==0) return 1;
	ll a=pot(n,k/2);
	a=mult(a,a);
	if (k%2) return mult(a,n);
	else return a;
}

int divide(int a,int b)
{
	return mult(a,pot(b,MOD-2));
}

inline int sub(int a,int b)
{
	if (a-b>=0) return a-b;
	return a-b+MOD;
}

inline int add(int a,int b)
{
	if (a+b>=MOD) return a+b-MOD;
	return a+b;
}

bool prime(ll a)
{
	if (a==1) return 0;
	for (int i=2;i<=round(sqrt(a));++i)
	{
		if (a%i==0) return 0;
	}
	return 1;
}

const int N=2010;
int n,m,pr[N][N],ind1[N],ind2[N],r1[N],r2[N],cu1,cu2;
vi ord1,ord2,ch1[N],ch2[N];
bool bio1[N],bio2[N];

void dfs1(int i)
{
	bio1[i]=1;
	ind1[i]=cu1++;
	ord1.pb(i);
	for (auto a: ch1[i]) if (!bio1[a]) dfs1(a);
	r1[i]=cu1;
}

void dfs2(int i)
{
	bio2[i]=1;
	ind2[i]=cu2++;
	ord2.pb(i);
	for (auto a: ch2[i]) if (!bio2[a]) dfs2(a);
	r2[i]=cu2;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	for (int i=0;i<10;++i) bases.push_back(rand()%(MOD-13893829*2)+13893829);
	cin>>n>>m;
	int ro1=0,ro2=0;
	for (int i=1;i<=n;++i)
	{
		int a,b;
		cin>>a>>b;
		if (a) ch1[a].pb(i);
		else ro1=i;
		if (b) ch2[b].pb(i);
		else ro2=i;
	}
	dfs1(ro1);
	dfs2(ro2);
	while (m--)
	{
		int a,b;
		cin>>a>>b;
		++pr[ind1[a]][ind2[b]];
		--pr[ind1[a]][r2[b]];
		--pr[r1[a]][ind2[b]];
		++pr[r1[a]][r2[b]];
	}
	for (int i=0;i<n;++i) for (int j=0;j<n;++j)
	{
		if (i) pr[i][j]+=pr[i-1][j];
		if (j) pr[i][j]+=pr[i][j-1];
		if (i && j) pr[i][j]-=pr[i-1][j-1];
	}
	for (int i=1;i<=n;++i) cout<<pr[ind1[i]][ind2[i]]<<en;
}



# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 1408 KB Output is correct
2 Correct 5 ms 1408 KB Output is correct
3 Correct 5 ms 1408 KB Output is correct
4 Correct 5 ms 1536 KB Output is correct
5 Correct 5 ms 1408 KB Output is correct
6 Correct 5 ms 1408 KB Output is correct
7 Correct 5 ms 1408 KB Output is correct
8 Correct 6 ms 1408 KB Output is correct
9 Correct 5 ms 512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 16504 KB Output is correct
2 Correct 31 ms 16504 KB Output is correct
3 Correct 29 ms 16256 KB Output is correct
4 Correct 29 ms 16256 KB Output is correct
5 Correct 29 ms 16376 KB Output is correct
6 Correct 31 ms 16312 KB Output is correct
7 Correct 29 ms 16376 KB Output is correct
8 Correct 29 ms 16376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 131 ms 17528 KB Output is correct
2 Correct 109 ms 17460 KB Output is correct
3 Correct 120 ms 17272 KB Output is correct
4 Correct 129 ms 17444 KB Output is correct
5 Correct 133 ms 17400 KB Output is correct
6 Correct 103 ms 17400 KB Output is correct
7 Correct 160 ms 17400 KB Output is correct
8 Correct 168 ms 17528 KB Output is correct