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条边,求从某一点起建立有向图最小生成树而且花费最小.输出最小花费和根节点下标. ...
随机推荐
- 【网贷投资手册】P2P行业揭秘
[网贷投资手册]P2P行业揭秘 (中国电子商务研究中心讯)如果你手头有100元,你会拿它来做什么?跟好朋友去吃一顿?跟女朋友去看场电影?还是……你会想到拿100元去投资吗?100元太少了,买一 ...
- 黑马程序员_JavaIO流(三)
字节流File读写操作 字符流: FileReader FileWriter BufferedReader BufferedWrtier 字节流: FileInputStream FileOutput ...
- HDU_1238——最大子串搜索
Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...
- PHP的输出缓冲区
什么是缓冲区?简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网山找下资料.其实缓冲区最本质的作用就是,协调 ...
- bui上手体验
在最近的项目中,接触到了bui这个后台管理框架 主页地址:http://builive.com/ 主页上也有一个后台管理的Demo:http://builive.com/apps/default/ma ...
- EditText设置可以编辑和不可编辑状态
1.首先想到在xml中设置android:editable="false",但是如果想在代码中动态设置可编辑状态,没有找到对应的函数 2.然后尝试使用editText.setFoc ...
- struts2讲义----二
Struts的namespace 示例工程Struts2_0200_Namespace Struts.xml <struts> <constant name="struts ...
- 解决蛋疼的阿里云单CPU使用率的问题。
工作中涉及到阿里云的应用.在性能测试阶段,压测过程中只要一个CPU未使用满,第二个CPU以至于第三个和第四个CPU完全用不到. 后来和阿里云的同事沟通他们现在用的是单队列的网卡,只能靠RPS/RFS这 ...
- Accordion( 分类) 组件
一. 加载方式 //class 加载方式<div id="box" class="easyui-accordion"style="width:3 ...
- 关于JS历史拓展
js由来 95年那时,绝大多数因特网用户都使用速度仅为28.8kbit/s 的“猫”(调制解调器)上网,但网页的大小和复杂性却不断增加.为完成简单的表单验证而频繁地与服务器交换数据只 ...