| ||||||||||
| 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 | |||||||||
400题留念~我也贴个代码,排序+floodfill#include <iostream>
using namespace std;
#define inf 16001
typedef struct tre
{
int x,y,left,right,top,down,used,rank;
}tre;
tre tree[inf],sort[inf];
int zone[inf],zk;
void flood(int n)
{
if(!tree[n].used&&n)
{
zone[zk]++;
tree[n].used=1;
flood(tree[n].left);
flood(tree[n].right);
flood(tree[n].top);
flood(tree[n].down);
}
}
int cmpx(const void *a,const void *b)
{
tre *c=(tre*)a;
tre *d=(tre*)b;
if(c->x!=d->x)
return c->x - d->x;
else
return c->y - d->y;
}
int cmpy(const void *a,const void *b)
{
tre *c=(tre*)a;
tre *d=(tre*)b;
if(c->y!=d->y)
return c->y - d->y;
else
return c->x - d->x;
}
int cmp(const void *a,const void *b)
{
int *c=(int*)a;
int *d=(int*)b;
return *d-*c;
}
int main()
{
int n,dk,i,dx,dy,sum;
cin>>n>>dk;
for(i=1;i<n+1;i++)
{
cin>>dx>>dy;
tree[i].x=sort[i].x=dx;
tree[i].rank=sort[i].rank=i;
tree[i].y=sort[i].y=dy;
}
qsort(sort+1,n,sizeof(sort[0]),cmpx);
dx=1;
while(dx<n+1)
{
while(sort[dx].x==sort[dx+1].x)
{
if(sort[dx+1].y-sort[dx].y==1)
{
tree[sort[dx].rank].right=sort[dx+1].rank;
tree[sort[dx+1].rank].left=sort[dx].rank;
}
dx++;
}
dx++;
}
qsort(sort+1,n,sizeof(sort[0]),cmpy);
dx=1;
while(dx<n+1)
{
while(sort[dx].y==sort[dx+1].y)
{
if(sort[dx+1].x-sort[dx].x==1)
{
tree[sort[dx].rank].down=sort[dx+1].rank;
tree[sort[dx+1].rank].top=sort[dx].rank;
}
dx++;
}
dx++;
}
zk=1;
for(i=1;i<n+1;i++)
if(tree[i].used==0)
{
flood(i);
zk++;
}
qsort(zone+1,zk-1,4,cmp);
sum=0;
for(i=1;i<dk+1;i++)
sum=sum+zone[i];
cout<<sum<<endl;
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator