답안 #69888

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
69888 2018-08-21T20:22:39 Z khohko Min-max tree (BOI18_minmaxtree) C++17
29 / 100
423 ms 45092 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
#define ll long long
#define pb push_back
#define fr first
#define sc second
#define MAX ((ll)(1e12+100))
#define MX ((ll)(1e6+100))
#define ARRS ((ll)(2e5+100))
#define HS ((ll)(233))
#define MOD ((ll)(1e9+7))
#define EP ((double)(1e-9))
#define LG 21
#define mul(a,b) a=((a)*(b))%MOD
using namespace std;
 
ll n,m,q;
set<ll> *st[ARRS];
vector<ll> v[ARRS];
vector<ll> g[ARRS];
ll mn[ARRS];
ll mx[ARRS];
ll pr[ARRS];
 
void go(ll x,ll p){
	pr[x]=p;
	st[x]=new set<ll>;
	for(auto y:g[x])
		st[x]->insert(y);
	//cout<<x<<endl;
	for(auto y:v[x]){
		if(y==p)continue;
		go(y,x);
		if(st[x]->size()<st[y]->size())swap(st[x],st[y]);
		for(auto k:*st[y]){
			if(st[x]->find(k)!=st[x]->end())
				st[x]->erase(k);
			else st[x]->insert(k);
		}
	}
 
	st[x]->insert(0);
	st[x]->insert(MAX);
 
	mx[x]=*st[x]->upper_bound(0);
	mn[x]=-(*st[x]->begin());
	//mx[x]=max(-1ll,mx[x]);
	if(mx[x]==MAX)mx[x]=-1;
	if(mn[x]==0)mn[x]=-1;
}
 
ll f[ARRS];
ll pas[ARRS];
map<ll,ll> mp;
 
 
bool mv(ll x){
	if(x==-1)return 0;
	if(!x)return 1;
	if(f[x])return 0;
	f[x]=1;
	if(mx[x]&&mv(mp[mx[x]])){
		mp[mx[x]]=x;
		return 1;
	}
	return 0;
}
 
int main(){
	#ifdef KHOKHO
		freopen("in.in","r",stdin);
		freopen("out.out","w",stdout);
	#endif // KHOKHO
	ios::sync_with_stdio(0);
	cin>>n;
	for(int i=0; i<n-1; i++){
		ll k,p;
		cin>>k>>p;
		v[k].pb(p);
		v[p].pb(k);
	}
	cin>>q;
	for(int i=0; i<q; i++){
		char ch;
		ll x,y,k;
		cin>>ch>>x>>y>>k;
		k++;
		if(ch=='m'){
			g[x].pb(-k);
			g[y].pb(-k);
		}
		else {
			g[x].pb(k);
			g[y].pb(k);
		}
	}
	go(1,-1);
 
	mp[-1]=-1;
	for(int i=2; i<=n; i++){
		ll x=i;
		if(mn[x]&&mv(mp[mn[x]])){
			mp[mn[x]]=x;
		}
		else if(mx[x]&&mv(mp[mx[x]])){
			f[x]=1;
			mp[mx[x]]=x;
		}
	}
 
	for(auto x:mp)
		pas[mp[x.fr]]=x.fr;
 
	for(int i=2; i<=n; i++){
		if(!pas[i])pas[i]=max(1ll,mn[i]);
		cout<<pr[i]<<" "<<i<<" "<<pas[i]-1<<endl;
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 9724 KB Output is correct
2 Correct 10 ms 9832 KB Output is correct
3 Correct 10 ms 9832 KB Output is correct
4 Correct 10 ms 9900 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 417 ms 40444 KB Output is correct
2 Correct 423 ms 45092 KB Output is correct
3 Correct 390 ms 45092 KB Output is correct
4 Correct 392 ms 45092 KB Output is correct
5 Correct 397 ms 45092 KB Output is correct
6 Correct 406 ms 45092 KB Output is correct
7 Correct 374 ms 45092 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 274 ms 45092 KB Output is correct
2 Correct 342 ms 45092 KB Output is correct
3 Correct 242 ms 45092 KB Output is correct
4 Correct 297 ms 45092 KB Output is correct
5 Correct 332 ms 45092 KB Output is correct
6 Correct 295 ms 45092 KB Output is correct
7 Correct 339 ms 45092 KB Output is correct
8 Incorrect 279 ms 45092 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 9724 KB Output is correct
2 Correct 10 ms 9832 KB Output is correct
3 Correct 10 ms 9832 KB Output is correct
4 Correct 10 ms 9900 KB Output is correct
5 Correct 417 ms 40444 KB Output is correct
6 Correct 423 ms 45092 KB Output is correct
7 Correct 390 ms 45092 KB Output is correct
8 Correct 392 ms 45092 KB Output is correct
9 Correct 397 ms 45092 KB Output is correct
10 Correct 406 ms 45092 KB Output is correct
11 Correct 374 ms 45092 KB Output is correct
12 Correct 274 ms 45092 KB Output is correct
13 Correct 342 ms 45092 KB Output is correct
14 Correct 242 ms 45092 KB Output is correct
15 Correct 297 ms 45092 KB Output is correct
16 Correct 332 ms 45092 KB Output is correct
17 Correct 295 ms 45092 KB Output is correct
18 Correct 339 ms 45092 KB Output is correct
19 Incorrect 279 ms 45092 KB Output isn't correct