比赛 不平凡的世界 评测结果 AWWWWWWWWW
题目名称 不平凡的许愿树 最终得分 10
用户昵称 Fmuckss 运行时间 3.859 s
代码语言 C++ 内存使用 0.46 MiB
提交时间 2015-11-05 11:48:33
显示代码纯文本
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#define maxn 5050
using namespace std;
typedef long long LL;
int n,m,deepmax;
int res;
int t1,t2;
int de[maxn],deep[maxn];
bool vis[maxn],use[maxn];
struct node{
	vector<int> ne;
	int d;
	bool le;
}ns[maxn];
int countc(int x){
	if(x==3)return 1;
	return (x*(x-1)*(x-2)*(x-3))/6;
}
void beg(){
	for(int i=1;i<=n;i++){
		de[i]=0;
		vis[i]=false;
		deep[i]=0;
	}
	deepmax=0;
}
void read(){
	scanf("%d",&n);
	m=n-1;
	for(int i=1;i<=m;i++){
		int a,b;
		scanf("%d %d",&a,&b);
		ns[a].ne.push_back(b);
		ns[b].ne.push_back(a);
		ns[a].d++;if(ns[a].d==1){ns[a].le=true;}else ns[a].le=false;
		ns[b].d++;if(ns[b].d==1){ns[b].le=true;}else ns[b].le=false;
	}
}
void bfs(int a){
	queue<int> q;
	q.push(a);
	de[a]=1;
	beg();
	while(q.size()){
		int x=q.front();q.pop();
		vis[x]=true;
		for(int i=0;i<ns[x].ne.size();i++){
			int tmp=ns[x].ne[i];
			if(vis[tmp])continue;
			de[tmp]=de[x]+1;
			q.push(tmp);
			deep[de[tmp]]++;
			deepmax=max(deepmax,de[tmp]);
		}
	}
	for(int i=1;i<=deepmax;i++){
		int tmp=deep[i];
		if(tmp>=3){
			res+=countc(tmp);
		}
/*		int canuse=0,cannotuse=0;
		if(tmp<3)continue;
		while(deep[i].size()){
			int x=deep[i].front();
			deep[i].pop();
			if(!use[x]){
				canuse++;
				use[x]=true;
			}else{
				cannotuse++;
			}
		}
		int del=0;
		if(cannotuse>=3){
			del=countc(cannotuse);
		}
		res+=countc(canuse+cannotuse)-del;*/
	}
}
void solve(){
	for(int i=1;i<=n;i++){
//		use[i]=true;
		if(ns[i].le)
			bfs(i);
	}
	t1=res%338+1;
	t2=(res+233)%338+1;
}
int main(){
	freopen("hopetree.in","r",stdin);
	freopen("hopetree.out","w",stdout);
	read();
	solve();
	printf("%d %d",t1,t2);
	return 0;
}