poj3164 (朱刘算法 最小树形图)
题目大意:给定n个点坐标,m条有向边,要求最小树形图。
题解:直接上模板,前面打的 vis[v]=i一直把i打成1,一直TLE。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
const double inf=;
struct Point{
int x,y;
}p[];
struct Edge{
double w;
int u,v;
}e[];
int n,m;
double In[];
int pre[],id[],vis[];
double dis(int i,int j){
return sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y));
}
double zhuliu(){
double ret=;
int u,v,rt=;
while (){
for (int i=;i<n;i++) In[i]=inf;
for (int i=;i<m;i++){
u=e[i].u;
v=e[i].v;
if (e[i].w<In[v]&&u!=v){
In[v]=e[i].w;
pre[v]=u;
}
}
for (int i=;i<n;i++){
if (i==rt) continue;
if (fabs(In[i]-inf)<1e-) return -;
}
int cnt=;
memset(id,-,sizeof id);
memset(vis,-,sizeof vis);
In[rt]=;
for (int i=;i<n;i++){
ret+=In[i];
v=i;
while (v!=rt&&vis[v]!=i&&id[v]==-){
vis[v]=i;
v=pre[v];
}
if (v!=rt&&id[v]==-){
for (u=pre[v];u!=v;u=pre[u]){
id[u]=cnt;
}
id[v]=cnt++;
}
}
if (cnt==) break;
for (int i=;i<n;i++){
if (id[i]==-) id[i]=cnt++;
}
for (int i=;i<m;i++){
u=e[i].u;
v=e[i].v;
e[i].u=id[u];
e[i].v=id[v];
if (e[i].u!=e[i].v){
e[i].w-=In[v];
}
}
n=cnt;
rt=id[rt];
}
return ret;
}
int main(){
freopen("poj3164.in","r",stdin);
freopen("poj3164.out","w",stdout);
while (~scanf("%d%d",&n,&m)){
for (int i=;i<n;i++) scanf("%d%d",&p[i].x,&p[i].y);
for (int i=;i<m;i++){
scanf("%d%d",&e[i].u,&e[i].v);
e[i].u--;e[i].v--;
if (e[i].u==e[i].v) e[i].w=inf;
else
e[i].w=dis(e[i].u,e[i].v);
}
double t=zhuliu();
if (t<0.0) printf("poor snoopy\n");
else printf("%.2f\n",t);
}
}
黄维大沙茶
poj3164 (朱刘算法 最小树形图)的更多相关文章
- poj3164(最小树形图&朱刘算法模板)
题目链接:http://poj.org/problem?id=3164 题意:第一行为n, m,接下来n行为n个点的二维坐标, 再接下来m行每行输入两个数u, v,表点u到点v是单向可达的,求这个有向 ...
- UVa11183 Teen Girl Squad, 最小树形图,朱刘算法
Teen Girl Squad Input: Standard Input Output: Standard Output You are part of a group of n teenage ...
- 最小树形图——朱刘算法(Edmonds)
定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入 ...
- POJ 3164 Command Network ( 最小树形图 朱刘算法)
题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...
- UVA-11183 Teen Girl Squad (最小树形图、朱刘算法模板)
题目大意:给一张无向图,求出最小树形图. 题目分析:套朱-刘算法模板就行了... 代码如下: # include<iostream> # include<cstdio> # i ...
- 【朱-刘算法】【最小树形图】hdu6141 I am your Father!
题意:给你一张带权有向图,让你求最大树形图.并在此前提下令n号结点父亲的编号最小. 比赛的时候套了个二分,TLE了. 实际上可以给每个边的权值乘1000,对于n号结点的父边,加上(999-父结点编号) ...
- AIZU AOJ 2309 Vector Compression 最小树形图(朱—刘算法)
题意简述:给定若干个相同维度的向量,寻找一种排序方法,使得所有向量的表示长度总和最低. 所谓表示长度为(Aj-r*Ai)^2,其中i<j 数据范围:向量总数和维度均小于100 思路:(1)首先 ...
- POJ--3164--Command Network【朱刘算法】最小树形图
链接:http://poj.org/problem?id=3164 题意:告诉n个点坐标,m条边表示两个点之间有路.从1点開始建立一个有向图最小生成树. 朱刘算法模板题 =============== ...
- HDUOJ--2121--Ice_cream’s world II【朱刘算法】不定根最小树形图
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2121 题意:n个顶点,m条边,求从某一点起建立有向图最小生成树而且花费最小.输出最小花费和根节点下标. ...
随机推荐
- mysql redo log
mysql> show variables like '%innodb_log_file_size%'; +----------------------+-----------+ | Varia ...
- Qt入门(5)——用Qt控件创建一个电话本界面
具体实现步骤: 一.首先用 Qt Designer 创建一个两张图的对话框,分别保存为listdialog.ui和editdialog.ui文件 要注意其中各个空间对应的名称修改好 二.新建一个Qt应 ...
- bzoj3791 作业
Description 众所周知,白神是具有神奇的能力的. 比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己完成. 今天,语文老师和 ...
- 微信、QQ和手机号之间不得不说的故事!
发文字,发图片,发心情,视频聊天,查看附近的人,微信能干的事情QQ都可以,那么它们有什么区别,我QQ用得好好的为什么要我联系人都导到微信去?我们很早就有了QQ,但是在QQ时代,我们虽然用QQ发消息聊天 ...
- MemSQL 3.1 发布,元方,你怎么看? - V2EX
MemSQL 3.1 发布,元方,你怎么看? - V2EX MemSQL 3.1 发布,元方,你怎么看?
- Java CompletableFuture 详解
Future是Java 5添加的类,用来描述一个异步计算的结果.你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel方法停止任务的执 ...
- [Flask]学习Flask第三天笔记总结
from flask import Flask,render_template,request from others import checkLogin app = Flask(__name__) ...
- H面试程序(10): 字符串包含问题
题目描述:判断第二个字符串中的元素是否都能在第一个字符串中找到: 注意:和字符串的字串的问题有所区别,如第一个字符串为 abcdefg,第二个字符串为 aaabc,第二个字串还是包含于第一个字符串 ...
- NSUserDefaults读取和写入自定义对象
NSUserDefaults可以存取一些短小的信息. 比如存入再读出一个字符串到NSUserDefaults: - NSString *string = [NSString stringWithStr ...
- view动画库
Android View Animations这个项目收集了各种有趣的动画效果. 所有效果: Attension Flash, Pulse, RubberBand, Shake, Swing, Wob ...