您的位置:首页 > 大数据 > 人工智能

2015 Multi-University Training Contest 3

2015-07-28 20:17 459 查看

 

 

1002 / HDU  5317 RGCDQ

题目大意:定义f(n)为n素因子的种类数,比如12=3*2*2有2和3两类素因子,给定l r求max{f(i),f(j)} (l<=i<j<=r)

思路:关键就是,2*3*5*7*11*13*17=510510再乘19就爆了,所以f(n)小于等于7!!!只要记录,这7个数在这个区间里分别出现了多少次,然后暴力扫7个数组合的gcd的最大值即可

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100009
#define ll long long
#define LLD "%lld"
using namespace std;
int nex[maxn],head[maxn],point[maxn],now,ans;
int n,k,x,y,in[maxn];
void add(int x,int y)
{
nex[++now] = head[x];
head[x] = now;
point[now] = y;
}
int dfs(int x,int k)
{
int ret = 1;
for(int i=head[x];i;i=nex[i])
{
int u = point[i];
ret+=dfs(u,k);
}
if(ret-1==k)
{
ans++;
}
return ret;
}
int main()
{
int t;
while(scanf("%d%d",&n,&k)!=EOF)
{
now = 0 ;
memset(in,0,sizeof(in));
memset(head,0,sizeof(head));
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
in[y]++;
}
ans=0;
for(int i=1;i<=n;i++)if(in[i]==0)
{
dfs(i,k);
}
printf("%d\n",ans);
}
return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: