| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求助!!!各位大大帮忙看一下我哪里错了.......#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct{
int x,y,l;
}seq;
seq s[10010];
int list[20010],n,m;
int sum[20010];
int father[20010];
int Input()
{
int i;
if(scanf("%d",&m)==EOF)return 0;
list[0]=0;
n=1;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].l);
list[n++]=s[i].x;//作映射用的
list[n++]=s[i].y;
}
return 1;
}
int cmp(const int &a,const int &b)
{
return a<b;
}
void SortList()
{
int i,j;
sort(list,list+n,cmp);
j=0;
for(i=1;i<n;i++) //去掉list[]中相同的数
if(list[i]!=list[j])
list[++j]=list[i];
n=j;
}
void InitSet()
{
int i;
for(i=0;i<=n;i++)
{
father[i]=i;
sum[i]=0;
}
}
int Map(int num,int l,int r)//二分查找
{
int mid;
mid=(l+r)/2;
if(list[mid]==num)return mid;
else if(list[mid]>num)return Map(num,l,mid-1);
else return Map(num,mid+1,r);
}
int FindRoot(int p)
{
int b=father[p];
if(father[p]!=p)
{
father[p]=FindRoot(father[p]);
sum[p]+=sum[b]; //刷新路径压缩后的sum(p+1,father[p])
}
return father[p];
}
int Accept(int p,int q,int l,int &result)
{
int a,b;
a=FindRoot(p);
b=FindRoot(q); /*printf("a=%d b=%d\n",a,b);*/
if(a==b)
{
result=sum[p]-sum[q];
if(result!=l)return 0;
else return 1;
}
if(a>b) //总是以较大的根作为两集合合并后的根
{
father[b]=a;
sum[b]=sum[p]-sum[q]-l;
}
else
{
father[a]=b;
sum[a]=sum[q]+l-sum[p];
}
return 1;
}
void Swap(int &p,int &q)
{
int t;
t=p;p=q;q=t;
}
void Ans()
{
int i,p,q,result;
SortList();
InitSet();
for(i=0;i<m;i++)
{
p=Map(s[i].x,0,n); //将s[i].x映射到升序序列list[]中s[i].x所在位置
q=Map(s[i].y,0,n);
if(p>q)Swap(p,q);
/*printf("p=%d q=%d l=%d\n",p,q,s[i].l);*/
if(Accept(p-1,q,s[i].l,result))printf("Accept\n");
else printf("Bug Detected %d\n",result);
}
}
int main()
{
while(Input())
Ans();
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator