POJ 3164 Command Network(最小树形图)

题目链接:http://poj.org/problem?id=3164

题意:给定一个图,求最小树形图。1为根节点。

思路:求以root为根的最小树形图(假设图中每个点均可由root到达):

(1)为每个顶点找一条权值最小的入边;

(2)此时如不存在环,结束;否则转(3);

(3)将环缩成一个点new;对于环中的每个点u,环中u的入边权值为x,对于边(i不在环中),增加边;对于边(i不在环中),增加边(显然你选择了这条边那么之前指向u的边就会删掉)。

(4)重复(1)到(3)直到结束。

#include 
#include 
#include 
#include 
#define min(x,y) ((x)<(y)?(x):(y))
using namespace std;

struct Point
{
	int x,y;
};

const double INF=1000000000.0;
Point p[105];
double map[105][105],ans;
int n,m,father[105],visit[105],flag[105];



double Dis(Point a,Point b)
{
	return sqrt(0.0+(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}


void DFS(int u)
{
	int v;
	visit[u]=1;
	for(v=1;v<=n;v++) if(!visit[v]&&map[u][v]

  

你可能感兴趣的:(POJ 3164 Command Network(最小树形图))