| ||||||||||
| 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 | |||||||||
我wa 无数次了 ,该死的题目描述。。。哎,你这组数据也过了。。怎么我的还是wa了,大神帮我看看我的程序In Reply To:WA的人:要按输入顺序回答 Posted by:drcrow at 2010-12-25 11:18:51
/*未AC*/
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct Node{
int x,y;
int parent;
};
Node node[40010];
struct Node1{ //记录输入的数据
int x,y;
int dis;
char dir;
};
Node1 node1[40010];
struct Node2{ //记录查询的数据
int x,y;
int index;
int flag;
};
Node2 node2[10010];
int m,n,k;
int ans[10010];
bool cmp(Node2 a,Node2 b)
{
return a.index<b.index;
}
void init()
{
int i;
for (i=0;i<=n;i++)
{
node[i].x=0;
node[i].y=0;
node[i].parent=-1;
}
}
int Find(int s)
{
// printf("%d",node[s].parent);
int x;
for ( x=s;node[x].parent>=0;x=node[x].parent);
if (node[s].parent>=0)
{
int temp=node[s].parent;
node[s].parent=Find(node[s].parent);
node[s].x=(node[s].x+node[temp].x);
node[s].y=(node[s].y+node[temp].y);
}
return x;
}
void Merge(int a,int b,int aa,int bb,int x,int y)
{
int temp=node[aa].parent+node[bb].parent;
if (node[aa].parent<node[bb].parent)
{
int xx=node[b].x+x;
int yy=node[b].y+y;
node[aa].x=xx-node[a].x;
node[aa].y=yy-node[a].y;
node[aa].parent=bb;
node[bb].parent=temp;
}
else{
node[bb].x=(node[a].x-node[b].x)+x;
node[bb].y=(node[a].y-node[b].y)+y;
// printf("%d%d%d%d\n",node[a].x,x,node[b].x,node[bb].x);
node[bb].parent=aa;
node[aa].parent=temp;
}
}
int main()
{
scanf("%d%d",&n,&m);
int i,j;
int x,y,s;
char d;
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&s);
getchar();
scanf("%c",&d);
node1[i].x=x;node1[i].y=y;node1[i].dis=s;node1[i].dir=d;
}
scanf("%d",&k);
for (j=1;j<=k;j++)
{
scanf("%d%d%d",&x,&y,&s);
node2[j].x=x;node2[j].y=y;node2[j].index=s;
node2[j].flag=j;
// printf("adsf");
}
int flag=1;
int a,b;
init();
sort(node2+1,node2+1+k,cmp);
// for (i=1;i<=k;i++)
// {
// printf("%d",node2[i].index);
// }
for (i=1;i<=m;i++)
{
if (node1[i].dir=='E')
{
a=node1[i].dis;
b=0;
}
else if (node1[i].dir=='W')
{
a=-node1[i].dis;
b=0;
}
else if(node1[i].dir=='N')
{
a=0;
b=node1[i].dis;
}
else
{
a=0;
b=-node1[i].dis;
}
int xx=Find(node1[i].x);
int yy=Find(node1[i].y);
// printf("\n%d%d\n",xx,yy);
Merge(node1[i].x,node1[i].y,xx,yy,a,b);
if (node2[flag].index==i)
do{
int xx1=Find(node2[flag].x);
int yy1=Find(node2[flag].y);
// printf("%d%d",xx1,yy1);
if (xx1!=yy1)
{
ans[node2[flag].flag]=-1;
// printf("adsf\n");
}
else
{
ans[node2[flag].flag]=abs(node[node2[flag].x].x-node[node2[flag].y].x)+abs(node[node2[flag].x].y-node[node2[flag].y].y);
// printf("adsf\n");
// printf("%d%d%d%d",node[1].x,node[1].y,node[6].x,node[6].y);
}
flag++;
}while(node2[flag].index==node2[flag-1].index);
if (flag==k+2)
{
break;
}
}
for (i=1;i<=k;i++)
{
printf("%d\n",ans[i]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator