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条边,求从某一点起建立有向图最小生成树而且花费最小.输出最小花费和根节点下标. ...
随机推荐
- Linux系统编程(37)—— socket编程之UDP服务器与客户端
典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...
- 【转】java读写二进制文件的解决方法
原文网址:http://www.jb51.net/article/36940.htm 接口:Writerable 复制代码代码如下: package com.geoway.pad.common; im ...
- sigaction 用法实例
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该 ...
- Android中sharedPreference的简单使用
public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super ...
- [LeetCode] 148. Sort List 解题思路
Sort a linked list in O(n log n) time using constant space complexity. 问题:对一个单列表排序,要求时间复杂度为 O(n*logn ...
- This manual page is part of Xcode Tools version 5.0
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.ht ...
- 探究css !important的应用之道
定义及语法: !important是CSS1就定义的语法,作用是提高指定样式规则的应用优先权. 语法格式:{ cssRule !important },即将!important写在定义的最后面, 例如 ...
- UVA 10651 Pebble Solitaire(bfs + 哈希判重(记忆化搜索?))
Problem A Pebble Solitaire Input: standard input Output: standard output Time Limit: 1 second Pebble ...
- mysql安装出现error Nr.1045
我们在windows下安装mysql时会出现Access denied for user 'root'@localhost'(using password:No)的问题,这个问题是因为你的机器上之前安 ...
- POJ 1386 有向图欧拉通路
题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) .然后问你是否可以全部连起来. 思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉 ...