题目链接:
思路:由于有S个专门的通道,我们可以先求一次最小生成树,然后对于最小生成树上的边从大到小排序,前S-1条边用S-1个卫星通道连接,那么第S大条边就是我们要找的最小的D了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 555 8 #define inf 1LL<<60 9 10 struct Node{11 int x,y;12 }node[MAXN];13 double map[MAXN][MAXN];14 double lowcost[MAXN];15 double dist[MAXN];16 bool mark[MAXN];17 int n,m;18 19 double Cal(int i,int j)20 {21 double d1=1.0*(node[i].x-node[j].x)*(node[i].x-node[j].x);22 double d2=1.0*(node[i].y-node[j].y)*(node[i].y-node[j].y);23 return sqrt(d1+d2);24 }25 26 int cmp(const double &p,const double &q)27 {28 return p>q;29 }30 31 double Prim(int u0)32 {33 int cnt=0;34 memset(mark,false,sizeof(mark));35 for(int i=1;i<=m;i++){36 lowcost[i]=map[u0][i];37 }38 lowcost[u0]=0;39 mark[u0]=true;40 for(int i=1;i