poj 1751 输出MST中新加入的边

给出结点的坐标 以及已建好的边 要输出MST中加入的边(已建好的边就不用输出了)
结点的编号从1开始
注意这题只有一组数据 不能用多组输入 否则就超时(在这被坑惨了Orz)

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

 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <cmath>
 6 # define LL long long
 7 using namespace std ;
 8
 9 const int INF=0x3f3f3f3f;
10 const int MAXN=760;
11 bool vis[MAXN];
12 double lowc[MAXN];
13 int n ;
14 double cost[MAXN][MAXN] ;
15 int pre[MAXN] ;
16
17 struct poin
18 {
19     int x ;
20     int y ;
21 }p[MAXN];
22
23 void Prim()
24 {
25     memset(vis,false,sizeof(vis));
26     vis[1]=true;
27     for(int i=2;i<=n;i++)
28     {
29         lowc[i]=cost[1][i];
30         pre[i] = 1 ;
31     }
32
33     for(int i=2;i<=n;i++)
34     {
35         double minc=INF;
36         int p=-1;
37         for(int j=1;j<=n;j++)
38             if(!vis[j]&&minc>lowc[j])
39             {
40                 minc=lowc[j];
41                 p=j;
42             }
43             if(minc != 0)
44                 {
45                     printf("%d %d\n",pre[p],p);
46                 }
47             if (p == -1)
48                return ;
49             vis[p]=true;
50             for(int j=1;j<=n;j++)
51                 if(!vis[j]&&lowc[j]>cost[p][j])
52                     {
53                         lowc[j]=cost[p][j];
54                         pre[j]=p;
55                     }
56     }
57     return ;
58 }
59
60 int main()
61 {
62
63     //freopen("in.txt","r",stdin) ;
64         scanf("%d" , &n) ;
65         int i , j ;
66         for (i = 1 ; i <= n ; i++)
67             scanf("%d %d" , &p[i].x , &p[i].y) ;
68         for (i = 1 ; i <= n ; i++)
69         {
70             cost[i][i] = INF ;
71             for (j = i+1 ; j <= n ; j++)
72             {
73                 double t = sqrt((double)(p[i].x - p[j].x) * (p[i].x - p[j].x) + (p[i].y - p[j].y) * (p[i].y - p[j].y)) ;
74                 cost[i][j] = t ;
75                 cost[j][i] = t ;
76             }
77         }
78
79         int m , u , v ;
80         scanf("%d" , &m) ;
81         while(m--)
82         {
83             scanf("%d %d" , &u , &v) ;
84             cost[u][v] = 0 ;
85             cost[v][u] = 0 ;
86         }
87         Prim() ;
88
89
90     return 0 ;
91 }

时间: 2024-12-08 04:01:35

poj 1751 输出MST中新加入的边的相关文章

POJ #2485 Highways MST中的最大边权

Description 问题描述:链接 思路 题目很直接,容易看出建的图是一张完全图,需要求出图中最小生成树的最大边权.由于数据上界已经定死了,那么选择用静态邻接表存建图.由于图是稠密图,那么求MST的话就选择 prim . 做完 POJ #2253 Frogger 变种Dijkstra 后再做这个就很有感觉了.其实prim中的核心操作就是记录并更新点v到树的最短距离,然后把所有最短距离之中的最小值选出,将该点其加入树集.这个树集与dijkstra中的点集是异曲同工的. 能用 scanf 的话尽

poj 2349 求MST中第S大的权值

题目大意: 有一些炮台,如果这个炮台有卫星接收器,那么任意两个有卫星接收器的炮台可以通信,不受距离限制:否者,两个炮台之间只能通过对讲机通信,这是受距离限制的.要买一种对讲机,用在需要的炮台上,要求所有炮台两两之间可以直接或者间接通信,问要买通信距离D至少为多少的对讲机可以满足要求. 有S个卫星接收器,那么就可以减少S-1个距离开销.要让D尽可能小,就让这S-1个距离开销最大,所以,想法就是,求这些点的最小生成树,然后把所选的边排序,第S大的边的权值就是所求.假如有4个点,2个卫星,那么最长的那

[2016-01-27][POJ][1751][B - Highways]

[2016-01-27][POJ][1751][B - Highways] B - Highways Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1751 Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a

HTML5中新添加事件

HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享.今天为大家介绍的事件主要是触摸事件:touchstart.touchmove和touchend. 一开始触摸事件touchstart.touchmove和touchend是iOs版Safari浏览器为了向开发人员传达一些信息新添加的事件.因为iOs设备既没有鼠标也没有键盘,所以在为移动Safari浏览器开发交互性网页的时

poj 1679 判断MST是不是唯一的

判断MST是不是唯一的 如果是唯一的 就输出最小的权值和 如果不是唯一的 就输出Not Unique! 先求出最小的权值和 然后一条边一条边的删先标记MST中所使用的边 删边就是屏蔽这条边后 再对剩下的边求MST 如果最后的权值和 与开始算出的最小的那个 相等 就说明不是唯一的 Sample Input 2 //T3 3 //n m1 2 1// u v w2 3 23 1 34 41 2 22 3 23 4 24 1 2Sample Output 3Not Unique! Kruskal 1

poj 1751 Highways (prim )

Highways Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9080   Accepted: 2536   Special Judge Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a very poor system of public highways. The Flatopian

LeetCode:Spiral Matrix - 螺旋输出矩阵中的元素

1.题目名称 Spiral Matrix(螺旋输出矩阵中的元素) 2.题目地址 https://leetcode.com/problems/spiral-matrix/ 3.题目内容 英文:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 中文:给出一个m行n列的矩阵,以螺旋顺序返回矩阵中的所有元素. 例如:现有矩阵如下: [  [ 1,

UWP中新加的数据绑定方式x:Bind分析总结

UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也没遇到麻烦.直到在园子里看到了这篇文章: http://www.cnblogs.com/gaoshang212/p/4534138.html 原来UWP的绑定中新加了个x:Bind,从文章中可以看到x:Bind的效率是很高的.找到MSDN(数据绑定)看了一下(完整的学习目录可参见: http://w

C语言 有一个整形数组a,有10个元素,要求输出数组中的全部元素

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">有一个整形数组a,有10个元素,要求输出数组中的全部元素</span> 解题思路:引用数组中各元素的值有3种方法:1.下标法,如a[3];2.通过数组名计算数组元素的地址,找出元素的值 3.用指针变量指向数组元素. //用指针变量指向数组元素 #include <std