104952024-04-03 15:01:19111A Day in Olbiacpp17Hibás válasz 0/1005.081s59132 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

int get(map<int,int>&m,int x){
	auto t=m.find(x);
	return t==m.end()?0:t->second;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	vector<vector<int>>g(N);
	for(int i=0;i<N-1;i++){
		int a,b;
		cin>>a>>b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	int ans=0;
	for(int m=1;m<=N;m++){
		auto dfs=[&](auto self,int i,int p,int d)->map<int,int>{
			map<int,int>s;
			for(int j:g[i]){
				if(j==p){
					continue;
				}
				auto z=self(self,j,i,d+1);
				ans+=get(z,i*m-d*2);
				if(s.size()<z.size()){
					swap(s,z);
				}
				for(auto[x,y]:z){
					ans+=get(s,-(x-d*2))*y;
				}
				for(auto[x,y]:z){
					s[x]+=y;
				}
			}
			s[i*m-d]++;
			return s;
		};
		dfs(dfs,0,-1,0);
	}
	cout<<ans<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Elfogadva3ms2060 KiB
subtask20/16
3Elfogadva4ms2300 KiB
4Elfogadva4ms2628 KiB
5Elfogadva4ms2680 KiB
6Hibás válasz4ms3020 KiB
subtask30/16
7Elfogadva660ms3352 KiB
8Elfogadva634ms3376 KiB
9Elfogadva160ms4084 KiB
10Elfogadva256ms3860 KiB
11Elfogadva218ms3848 KiB
12Hibás válasz172ms4128 KiB
13Hibás válasz181ms4220 KiB
14Hibás válasz173ms4460 KiB
15Hibás válasz165ms4676 KiB
subtask40/16
16Időlimit túllépés5.066s17992 KiB
17Időlimit túllépés5.071s19096 KiB
subtask50/52
18Időlimit túllépés5.081s19772 KiB
19Időlimit túllépés5.034s20988 KiB
20Időlimit túllépés5.048s45808 KiB
21Időlimit túllépés5.076s40852 KiB
22Időlimit túllépés5.072s43732 KiB
23Időlimit túllépés5.059s45872 KiB
24Időlimit túllépés5.052s48964 KiB
25Időlimit túllépés5.076s52020 KiB
26Időlimit túllépés5.068s53028 KiB
27Időlimit túllépés5.057s54252 KiB
28Időlimit túllépés5.072s55336 KiB
29Időlimit túllépés5.048s56424 KiB
30Időlimit túllépés5.065s57716 KiB
31Időlimit túllépés5.076s59132 KiB