比赛 |
不平凡的世界 |
评测结果 |
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;
}