poj3164 Command Network||openjudge 地震之后

这是题目:

6:地震之后
总时间限制: 1000ms 内存限制: 130000kB
描述
2008年地震之后,坚强县受灾严重,该县通信线路也收到了致命的打击,县总部为了能够及时的向各村的发送消息,命令小强去解决一下这个问题。

小强经过调查发现,为了能够快速的实现通信,当务之急是能够建立起一条从总部可以向各个村单向发送信息的通信系统。由于灾后情况紧急,不是每一个村之间都能够快速的建立起通信线路,只有有限的村比如村A和村B间可以建立单向的从A向B发送信息的通信线路,小强现在的问题就是要找出一个合适的方案,使从总部发送出的信息能够通到各村,而用的总的通信线路是最短的(毕竟情况危急,物质短缺)。

输入
输入包括多组的测试数据。
对于每一组测试数据:
1、第一行包括两个整数N(1<=N<=100),M(M<<=10000),N表示通信网络中村子的数量,M表示在这些村子中,可以有M条通信线路建起来。
2、接下来N行,每行两个整数xi,yi,代表着这个村子的X轴,Y轴的坐标(xi,yi)
3、接下来M行,每行两个整数c1(1<=c1<=N),c2(1<=c2<=N),代表着从村c1到村c2可以建一个单向线路。

注:两村之间的直线段距离(通信线路长度),即为两点间的欧式距离。
县总部所在的村假设都在编号为1的村。
输入以文件终止为结束。
输出
对于每一组的测试数据,输出完全的一行,值为最短的总长度,结果保留两位小数。
如果不能建立一个单向的临时网络,输出"NO".
样例输入
4 6
3 6
4 6
3 4
7 20
1 2
1 3
2 3
3 4
3 1
3 2
4 3
0 0
1 0
1 1
1 2
1 3
4 1
2 3
样例输出
19.49
NO


裸的最小树形图/有向图的最小生成树。详细分析见: 最小树形图,朱刘算法。虽然是模板,但还是再一次默写了一遍,再一次注释了一遍。


代码清单:

#include 
#include 
#include 
using namespace std;

#define N 105
#define INFINITE 999999999
#define MYTYPE double

struct _point
{
	int x;
	int y;
} point[N];

struct _edge
{
	int from;
	int to;
	MYTYPE cost;
} edge[N*N];

MYTYPE inw[N];	//最小入边
int vis[N];	//是否被访问
int id[N];	//由当前图到重构图的映射
int pre[N];	//前驱顶点

MYTYPE Directed_MST(int root, int NV, int NE)
{
	MYTYPE ret=0;

	while (1)	//开始迭代过程
	{
		//1.确定最小入边集
		for(int i=0; i


你可能感兴趣的:(Still,Water,Runs,图)