Highways
Highways
https://vjudge.net/contest/477987#problem/J
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int inf=0x3f3f3f;
double cmap[755][755],d[755],x[755],y[755];
int c[755],n,pre[755],q[1005][1005];
void prim()
{
cmap[1][1]=inf;
for(int i=1;i<=n;i++)
{
d[i]=cmap[1][i];//cout<<d[i]<<endl;
pre[i]=1;
}
c[1]=1;
for(int i=1;i<=n;i++)
{
int u=-1;
double cmin=inf;
for(int j=1;j<=n;j++)
{
if(c[j]==0&&d[j]<cmin)
{
u=j;
cmin=d[j];
}
}
if(u==-1)continue;
c[u]=1;
if(q[pre[u]][u]==0)cout<<pre[u]<<" "<<u<<endl;
for(int j=1;j<=n;j++)
{
if(c[j]==0&&d[j]>cmap[u][j])
{
pre[j]=u;
d[j]=cmap[u][j];//cout<<u<<" "<<j<<" "<<d[j]<<endl;
}
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
memset(c,0,sizeof(c));
memset(cmap,inf,sizeof(cmap));
memset(q,0,sizeof(q));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)continue;
double k=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
cmap[i][j]=cmap[j][i]=k;
}
}
int m;
cin>>m;
for(int i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;q[a][b]=q[b][a]=1;
cmap[a][b]=cmap[b][a]=0;
}
prim();
}

浙公网安备 33010602011771号