标签:
| Time Limit: 1000MS | Memory Limit: 10000K | |||
| Total Submissions: 9487 | Accepted: 2646 | Special Judge | ||
Description
Input
Output
Sample Input
9 1 5 0 0 3 2 4 5 5 1 0 4 5 2 1 2 5 3 3 1 3 9 7 1 2
Sample Output
1 6 3 7 4 9 5 7 8 3
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdlib>
using namespace std;
#define INF 0x7fffffff
int n,m,low[1010],a[1010][1010],vis[1010],pre[1010];
struct node
{
int x,y;
}e[1010];
void solve()
{
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
a[i][j]=a[j][i]=abs(e[i].x-e[j].x)*abs(e[i].x-e[j].x)+abs(e[i].y-e[j].y)*abs(e[i].y-e[j].y);
}
}
void prim()
{
int minn,pos;
pos=1;
vis[pos]=1;
for(int i=1;i<=n;i++)
{
if(i!=pos)
low[i]=a[pos][i];
}
for(int i=1;i<n;i++)
{
minn=INF;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&low[j]<minn)
{
minn=low[j];
pos=j;
}
}
vis[pos]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&low[j]>a[pos][j])
{
low[j]=a[pos][j];
pre[j]=pos;
}
}
}
}
int main()
{
int x,y;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d%d",&e[i].x,&e[i].y),pre[i]=1;
solve();
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
a[x][y]=a[y][x]=0;
}
prim();
for(int i=2;i<=n;i++)
{
if(a[pre[i]][i]!=0)
{
printf("%d %d\n",i,pre[i]);
}
}
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4264327.html