求管理员解惑,为什么<cmath>不对

p1443 银河英雄传说
我将<cmath>改成<cstdlib>,<algorithm>就可以过了,这是怎么回事?

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
using namespace std;

const int maxn=3e4;
int f[maxn+20],s[maxn+20],l[maxn+20];

int getin()
{
int ans=0;char tmp;
while(!isdigit(tmp=getchar()) && tmp!='M' && tmp!='C');
if(tmp=='M')return 1;
if(tmp=='C')return 0;
do ans=(ans<<3)+(ans<<1)+tmp-'0';
while(isdigit(tmp=getchar()));
return ans;
}

int find(int x)
{
if(f[x]==x)return x;
int y=find(f[x]);
l[x]+=l[f[x]];
return f[x]=y;
}

int main()
{
int i,t,d,x,y,rx,ry;
for(i=1;i<=maxn;i++)f[i]=i,s[i]=1;
for(t=getin(),i=1;i<=t;i++)
{
d=getin(),x=getin(),y=getin();
rx=find(x),ry=find(y);
if(d)
{
f[rx]=ry,l[rx]=s[ry];
s[ry]+=s[rx]; continue;
}
if(rx!=ry){printf("-1\n");continue;}
if(x==y)printf("0\n");
else printf("%d\n",abs(l[x]-l[y])-1);
}
return 0;
}

3 条评论

  • @ 2015-09-15 14:49:56

    根据这里intabs是在<cstdlib>里定义的,<cmath>中的是浮点数,可能产生浮点误差。

  • @ 2015-09-15 13:34:21

    这个不是一直都有吗?我都用了4年多了

  • @ 2015-09-11 15:55:20

    印象中似乎cmath这个库是某个gcc版本更新后才有的

  • 1

信息

ID
1443
难度
7
分类
数据结构 | 并查集 点击显示
标签
递交数
3503
已通过
715
通过率
20%
被复制
7
上传者