讨论 / c++AC 贪心+高精乘单精 超简方法!
lawrence2004 2017-09-10 14:31:24
点我顶贴 收藏 删除
#include<cstdio>

int n,m,k;

int a[1010],f[1010];

void cf(int x)

{

for(int i=1;i<=k;i++)f[i]*=x;

for(int i=1;i<=k;i++)

{

if(f[i]>=10)

{

f[i+1]+=f[i]/10;

f[i]%=10;

if(i==k)k++;

}

}

while(f[k]==0&&k>1)k--;

}

int main()

{

scanf("%d",&n);

m=0;

for(int i=2;i;i++)

{

if(n>=i){a[++m]=i;n-=i;}

else break;

}

while(n)

{

for(int i=m;i>=1;i--)

{

if(n){a[i]++;n--;}

else break;

}

}

k=1;f[1]=1;

for(int i=1;i<=m;i++)cf(a[i]);

for(int i=k;i>=1;i--)printf("%d",f[i]);

return 0;

}

#1 lijie201602@2017-09-10 14:43:12
回复 删除
#include<cstdio>

int n,m,fa[1001],v[1001];

int findfa(int x)

{

if(x==fa[x]) return x;

return fa[x]=findfa(fa[x]);

}

void change(int x,int y)

{

int a=findfa(x),b=findfa(y);

fa[a]=b;

}

int main()

{

scanf("%d %d",&n,&m);

for(int i=1;i<=n;i++)

{

fa[i]=i;

v[i]=0;

}

for(int i=1;i<=m;i++)

{

int a,b; scanf("%d %d",&a,&b);

change(a,b);

}

int max=0;

for(int i=1;i<=n;++i)

{

int x=findfa(fa[i]);

if(++v[x]>max) max=v[x];

}

printf("%d",max);

return 0;

}

并查集

查看更多回复
提交回复