Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

两行的东西都写成函数?调用起来浪费多少时间(pascal的习惯真是……)

Posted by frkstyc at 2005-07-14 13:02:40 on Problem 1751
In Reply To:Re:用prim,比并查集快. Posted by:springtty at 2005-07-14 12:58:35
> 用了prim的,在build函数中处理,但是还是超时,本地处理700个数据花了3s,大部分时间像是在处理输入输出
> #include <iostream>
> #include <string.h>
> using namespace std;
> #define  GetDisDB(x0,y0,x1,y1) ((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0))
> #define  Max  751
> typedef struct
> {
> 	int x,y;
> }Point;
> 
> int HashConn[Max][Max];
> int Map[Max][Max];
> int SetConn[Max];
> int ConnEndIndex;
> int SetLeft[Max];
> int LeftEndIndex;
> 
> Point Value[Max];
> 
> void SetZero(int a,int b)
> {
> 	Map[a][b] = 0;
> 	Map[b][a] = 0;
> }
> 
> void RemoveIndexFromLeft(int index)
> {
> 	SetLeft[index] = 0;
> 	LeftEndIndex--;
> }
> 
> void AddIndexToSetConn(int v)
> {
> 	ConnEndIndex++;
> 	SetConn[ConnEndIndex] = v;
> }
> 
> void Build(int n)
> {
> 	int a,b,i,j,v;
> 	int index = 0;
> 	int curi,curj;
> 
> 	while(LeftEndIndex)
> 	{
> 		a = b = 0;
> 		v = 0x0FFFFFFF;
> 		
> 		for(i= 1;i<=ConnEndIndex;i++)
> 			for(j=1;j<=n;j++)
> 			{
> 				if(SetLeft[j])
> 				{
> 					curi = SetConn[i];
> 					curj = SetLeft[j];
> 			 
> 					if((Map[curi][curj]<v))	
> 					{
> 						a = curi;
> 						b = curj;
> 						v = Map[curi][curj];
> 						index = j;
> 					}
> 				}
> 				
> 			}
> 		if(!HashConn[a][b])	cout<<a<<" "<<b<<endl;	
> 		AddIndexToSetConn(b);
> 		RemoveIndexFromLeft(index);
> 	
> 	}
> }
> 
> 
> int main()
> {
> 	int i,j,n,p,a,b;
> 	int v,x,y;
> 
> 	(cin>>n);
> 	{
> 		memset(Map,0,sizeof(int)*Max*Max);
> 		memset(SetConn,0,Max*sizeof(int));
> 		memset(SetLeft,0,Max*sizeof(int));
> 		memset(Value,0,Max*sizeof(Point));
> 		memset(HashConn,0,sizeof(int)*Max*Max);
> 		
> 		for(i=1;i<=n;i++)
> 		{
> 			cin>>x>>y;
> 			Value[i].x = x;
> 			Value[i].y = y;
> 			SetLeft[i] = i;
> 		}
> 		
> 		for(i=1;i<=n;i++)
> 		for(j=i+1;j<=n;j++)
> 		{
> Map[i][j] = GetDisDB(Value[i].x,Value[i].y,Value[j].x,Value[j].y);
> 		Map[j][i] = Map[i][j];
> 		}
> 
> 
> 		cin>>p;
> 
> 		for(i=1;i<=p;i++)
> 		{
> 			cin>>a>>b;
> 			SetZero(a,b);
> 			HashConn[a][b] = 1;
> 			HashConn[b][a] = 1;
> 		}
> 		
> 		ConnEndIndex = 0;	
> 		LeftEndIndex = n;
> 		RemoveIndexFromLeft(1);
> 		AddIndexToSetConn(1);
> 		Build(n);
> 
> 	}
> 
> 	return 0;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator