http://poj.org/problem?id=3164

第一次做最小树形图,看着别人的博客写,还没弄懂具体的什么意思。

 #include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define maxn 1000
using namespace std;
const int inf=<<; int n,m;
double g[maxn][maxn];
bool vis[maxn];
int cicl[maxn];
int pre[maxn];
struct node
{
double x,y;
}p[maxn]; double sqr(int x)
{
return x*x;
} double dis(int a,int b)
{
return sqrt(sqr(p[a].x-p[b].x)+sqr(p[a].y-p[b].y));
} void dfs(int s)
{
if(vis[s]) return ;
vis[s]=true;
for(int i=; i<=n; i++)
{
if(g[s][i]<inf)
{
dfs(i);
}
}
} bool deal()
{
dfs();
for(int i=; i<=n; i++)
{
if(!vis[i]) return false;
}
return true;
} double solve()
{
double ans=;
int i;
memset(cicl,,sizeof(cicl));
while()
{
for(i=; i<=n; i++)
{
if(cicl[i]) continue;
g[i][i]=inf;
pre[i]=i;
for(int j=; j<=n; j++)
{
if(cicl[j]) continue;
if(g[j][i]<g[pre[i]][i])
{
pre[i]=j;
}
}
}
int j;
for(i=; i<=n; i++)
{
if(cicl[i]) continue;
j=i;
memset(vis,false,sizeof(vis));
while(!vis[j]&&j!=)
{
vis[j]=true;
j=pre[j];
}
if(j==) continue;
i=j;
ans+=g[pre[i]][i];
for(j=pre[i]; j!=i; j=pre[j])
{
ans+=g[pre[j]][j];
cicl[j]=;
}
for(j=; j<=n; j++)
{
if(cicl[j]) continue;
if(g[j][i]<inf)
{
g[j][i]-=g[pre[i]][i];
}
}
for(j=pre[i]; j!=i; j=pre[j])
{
for(int k=; k<=n; k++)
{
if(cicl[k]) continue;
if(g[j][k]<inf)
{
g[i][k]=min(g[i][k],g[j][k]);
}
if(g[k][j]<inf)
{
g[k][i]=min(g[k][i],g[k][j]-g[pre[j]][j]);
}
}
}
break;
}
if(i>n)
{
for(j=; j<=n; j++)
{
if(cicl[j]) continue;
ans+=g[pre[j]][j];
}
break;
}
}
return ans;
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
g[i][j]=inf;
}
}
for(int i=; i<=n; i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
}
for(int i=; i<m; i++)
{
int s,t;
scanf("%d%d",&s,&t);
g[s][t]=dis(s,t);
}
memset(vis,false,sizeof(vis));
if(!deal())
{
printf("poor snoopy\n");
}
else printf("%.2lf\n",solve());
}
return ;
}

poj 3164 Command Network的更多相关文章

  1. poj 3164 Command Network(最小树形图模板)

    Command Network http://poj.org/problem?id=3164 Time Limit: 1000MS   Memory Limit: 131072K Total Subm ...

  2. POJ 3164——Command Network——————【最小树形图、固定根】

    Command Network Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 15080   Accepted: 4331 ...

  3. POJ 3164 Command Network 最小树形图

    题目链接: 题目 Command Network Time Limit: 1000MS Memory Limit: 131072K 问题描述 After a long lasting war on w ...

  4. POJ 3164 Command Network ( 最小树形图 朱刘算法)

    题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...

  5. POJ 3164 Command Network (最小树形图)

    [题目链接]http://poj.org/problem?id=3164 [解题思路]百度百科:最小树形图 ]里面有详细的解释,而Notonlysucess有精简的模板,下文有对其模板的一点解释,前提 ...

  6. POJ 3164 Command Network(最小树形图模板题+详解)

    http://poj.org/problem?id=3164 题意: 求最小树形图. 思路: 套模板. 引用一下来自大神博客的讲解:http://www.cnblogs.com/acjiumeng/p ...

  7. poj 3164 Command Network (朱刘算法)

    题目链接: http://poj.org/problem?id=3164 题目大意: 有n个点(用坐标表示)各点编号分别为1—>n,m条单向路,问能否存在一个花费价值最小的网络,能使从1点到达任 ...

  8. POJ 3164 Command Network 最小树形图模板

    最小树形图求的是有向图的最小生成树,跟无向图求最小生成树有很大的区别. 步骤大致如下: 1.求除了根节点以外每个节点的最小入边,记录前驱 2.判断除了根节点,是否每个节点都有入边,如果存在没有入边的点 ...

  9. POJ 3164 Command Network 最小树形图 朱刘算法

    =============== 分割线之下摘自Sasuke_SCUT的blog============= 最 小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T, ...

随机推荐

  1. UltraChart导出图片

    ? //一定要先绑定UltraChart,如果先绑定,然后有点击图片导出,没有用的 string fulPath="xxxx"; this.UltraChartTScore.Sav ...

  2. 【转】 i2c驱动调试经验

    原文网址:http://blog.csdn.net/cmm20071020/article/details/7179958 把一个i2c驱动从2.6.21升级到2.6.39 上网查到一篇帖子,讲了驱动 ...

  3. JAVA大整数傻瓜入门

    http://blog.csdn.net/skiffloveblue/article/details/7032290..先记着

  4. Shell下通过echo+telnet在远端执行命令

    创建脚本cmd.sh,用于输入telnet的用户与密码,以及生成远端需要执行的命令   执行命令 MY_SIGN=/tmp/sign; (sh cmd.sh ) | (telnet localhost ...

  5. javascript 我是广告

    <!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equ ...

  6. PHP操作MySQL数据库的相关函数

    首先,要分清SQL语句的类型: SQL语句的分类 (1)DDL:Data Define Language,数据定义语言--定义表的列结构 CREATE.DROP.ALTER.TRUNCATE (2)D ...

  7. 用CSS3实现对图片的放大效果

    用CSS3对图片放大效果 .right_div .topicons li a:hover img{     -webkit-transform:scale(1.5,1.5);     -moz-tra ...

  8. 【桌面虚拟化】之三 Persistent vs NonP

    作者:范军 (Frank Fan) 新浪微博:@frankfan7 在[桌面虚拟化]之二类型及案例中我们探讨了桌面虚拟化的两种架构,HostedVirtual Desktop (VDI) 和 Publ ...

  9. Android 打造自己的个性化应用(三):应用程序的插件化

    在android的项目开发中,都会遇到后期功能拓展增强与主程序代码变更的现实矛盾,也就是程序的灵活度. 由于linux平台的安全机制,再加上dalvik的特殊机制,各种权限壁垒,使得开发一个灵活多变的 ...

  10. 学习使用Vim(一)

    今天下定决心要逐渐脱离IDE的"comfortable zone",学习使用Vim.以前偶尔使用Vim的经历都是很痛苦的,觉得各种不方便和命令复杂难懂.但既然那么多书都推荐使用Vi ...