4301 2023. 03. 22 15:02:56 horvathabel Útadó cpp17 Időlimit túllépés 20/50 800ms 8976 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
vector<ll> g[50001];
vector<ll>c(50001);
vector<pair<ll,int>> db ; 
ll dfs(int x){
	if (c[x]==0){
		db[x]={1,x};
		return db[x].first;
	} 
	else{
		for (int edge:g[x]){
			db[x].first+=dfs(edge);
		}
		db[x].second=x; 

	}
	return (db[x].first);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin>>n;

vector<int> p;
p.resize(n+1);
for (int i=1;i<n;i++)
{
ll x,y;
cin>>x>>y;
db.assign(n+1, {1,0}); 
c[x]++; 
p[y]=x;
g[x].push_back(y);

}
vector<ll> arak;
for (int i=1; i<n;i++){
	ll x;
	cin>>x; 
	arak.push_back(x);
}

dfs(1);
for (int i=1; i<=n;i++) db[i].first=db[i].first*(n-db[i].first);
sort(db.begin(), db.end());
sort(arak.begin(), arak.end());
ll ans=0; 
vector<pair<pair<ll, ll>,ll>> cnt; 
for (int i=2; i<=n;i++){
	ans+=db[i].first*arak[i-2]*2;
	ans=ans%32609;
	cnt.push_back({{db[i].second, p[db[i].second]},arak[i-2]});
}
cout<<ans<<endl; 
for (auto x: cnt) cout<<x.first.second<<" "<<x.first.first<<" "<<x.second<<"\n"; 

}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 20/50
1 Elfogadva 0/0 4ms 4784 KiB
2 Elfogadva 0/0 456ms 8976 KiB
3 Elfogadva 2/2 4ms 5188 KiB
4 Elfogadva 2/2 4ms 5492 KiB
5 Elfogadva 2/2 4ms 5612 KiB
6 Elfogadva 2/2 4ms 5916 KiB
7 Elfogadva 2/2 4ms 6128 KiB
8 Időlimit túllépés 0/8 800ms 5624 KiB
9 Elfogadva 2/2 6ms 6656 KiB
10 Elfogadva 2/2 6ms 6912 KiB
11 Elfogadva 2/2 4ms 6892 KiB
12 Elfogadva 2/2 6ms 7212 KiB
13 Elfogadva 2/2 4ms 7100 KiB
14 Időlimit túllépés 0/2 750ms 6052 KiB
15 Időlimit túllépés 0/2 759ms 5944 KiB
16 Időlimit túllépés 0/2 757ms 5980 KiB
17 Időlimit túllépés 0/2 764ms 5968 KiB
18 Időlimit túllépés 0/2 751ms 6156 KiB
19 Időlimit túllépés 0/2 762ms 6288 KiB
20 Időlimit túllépés 0/2 763ms 6400 KiB
21 Időlimit túllépés 0/2 777ms 6408 KiB
22 Időlimit túllépés 0/2 758ms 6636 KiB
23 Időlimit túllépés 0/2 768ms 6864 KiB
24 Időlimit túllépés 0/2 773ms 6784 KiB