poj1789

POJ1789-Truck History【Prim】 北大POJ1789-Truck History【Prim】 解题报告+AC代码 立即下载

算是很基础的最小生成树了吧,我用kruskal做的,机器转了400多ms,说明写的不是很好,目前尚在入门,慢慢来。

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
struct n1
{
	int s,e,w;
};
n1 path[2100000];
int father[2001];
int find(int i)
{
	while(father[i]!=i)
	{
		i=father[i];
	}
	return i;
}
bool cmp(n1 a,n1 b)
{
	return a.w<b.w;
}
int kruskal(int v,int e)
{
	int temp1,temp2,i,sum,num_bian;
	v--;
	i=sum=num_bian=0;
	sort(path+1,path+e+1,cmp);
	while(num_bian!=v)
	{
		i++;
		temp1=find(path[i].s);
		temp2=find(path[i].e);
		if(temp1!=temp2)
		{
			sum+=path[i].w;
			num_bian++;
			if(temp1>temp2)
			temp1^=temp2^=temp1^=temp2;
			father[temp2]=temp1;
		}
	}
	return sum;
}
int juli(char *a,char *b)
{
	int i,sum;
	sum=0;
	for(i=0;i<7;i++)
	{
		if(a[i]!=b[i])
		sum++;
	}
	return sum;
}
int main()
{
	int i,j,k,n;
	char kache[2001][8];
	while(scanf("%d",&n)&&n!=0)
	{
		for(i=1;i<=n;i++)
		{
			scanf("%s",kache[i]);
			father[i]=i;
		}
		k=0;
		for(i=1;i<n;i++)
		for(j=i+1;j<=n;j++)
		{
			k++;
			path[k].s=i;
			path[k].e=j;
			path[k].w=juli(kache[i],kache[j]);
		}
		printf("The highest possible quality is 1/%d.\n",kruskal(n,k));
	}
}


 

POJ1789——最小生成树 1.题意: 输入: n输入,代表有n个长度为7的字符串,我们以字符串本身为结点,题中定义了两个节点之间的距离,定义为两个字符串中相同位置处不同的字符的个数,所以我们发现本题是个非常稠密的图 我们直接用二维矩阵记录所有的数据比较能够大米毒的合理利用空间 输出最小生成树的倒数 2.算法: 本题中我们会发现,边的数目非常的庞大 这就引出了一个问题 Krustral算法要涉及到排序,如此大 阅读详情

相关推荐

POJ1789(最小生成树,kruskal算法)

 由于和结点联系非常密切,所以容易想到使用kruskal算法。 题意:编写程序输出最高质量的火车推导计划。火车推倒计划质量的求解公式中的分子为1,分母为t0,td的距离总和。 t0,td的距离就是两个输入字符串的字母不同位置的个数。想要推导计划的质量最高就是使分母最小。即t0,td的距离总和最小。 实质上是以任意两个字符串为结点,以字符串字母不同位置的个数为两节点之间边的权值,求解最小生成树...

圣帝天龙之博客传奇 2393

poj1789--prim

每天进步一点点~ 今天写的是poj1789 题目的大致意思是: 给很多个长度为7的字符串,判断字符串的最小衍生数 使用的是prime算法 #define LOCAL #include &lt;stdio.h&gt; #include &lt;string.h&gt; #define MAXN 2000 + 10 #define MAXL 7+10 char truckTypes...

kanwoerzi 208

【prim算法】poj1789

【prim算法】poj1789

m0_71009069的博客 210

poj 1789 最小生成树

传送门 题意:计算一个派生计划值,其实就是 1/最小生成树。 思路:prim搞之,这题距离给的比较特别,如 aaaaaaa baaaaaa 计算7位字符串的不同的位数就是该两点之间的距离。 其他没啥。 反思:少写条件还忘记初始化,该醒醒了。。。。。。 #include #include #include #define maxn 1<<29 using namespace std;

Cugb->Baoge 660

poj 1789

http://poj.org/problem?id=1789 这是一道图论的题,个人觉得和那个POJ1258是差不多的,就是多了一步,题目难以读懂 题目的意思:就是给你一群字符串要你找字符串对应的字符不同,使得这个字符串与其他字符串不同 举个例子,不然题目也确实看不懂, 4 a b a a a b a b a a a a b a ba a b b a b a b a a...

A1823085974的博客 190

POJ1789 prim算法

POJ1789 prim算法 题目分析 http://poj.org/problem?id=1789 两个卡车之间id字符不同的位置数量视为两卡车之间边的权重,任意两个点均直接相连,为稠密图 注意字符串的输入与输出,https://blog.csdn.net/sinat_37592533/article/details/79266182 数组最好定义在main函数外面 #include<st...

qq_43513855的博客 179

POJ 1789 Truck History

POJ 1789 Truck History Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for vegetable delivery, other for furniture, or for bricks. The company has its ow...

旺崽的博客 3145

POJ1789【CTU Open 2003】Truck History

题目链接:http://poj.org/problem?id=1789 【分析】     最小生成树不解释。 【代码】 #include #include using namespace std; const int maxn=2010,inf=~0U>>1; char s[maxn][10]; int dist[maxn][maxn],d[maxn],vis[max

Zarxdy34 811

POJ 1789 (最小生成树之Kruskal算法)

题目链接:http://poj.org/problem?id=1789 题意:给出多个字符串,每两个字符串之间不同的字符数作为一个字符串衍生出另一个字符串的代价,求出如果衍生出所有的字符串需要的1/Q(Q为总代价)。 这题的难点应该就在于如何将这个问题转化成最小生成树模型。每两个字符串之间都需要连一条线,得到的是一个完全图,然后求出最小生成树。 一开始考虑的是稠密图用Prim()算法

To be excellent! 826

poj_1789

题目链接:http://poj.org/problem?id=1789 题目大意:有n种truck,每种都用一个长度为7的字符串表示,除了原始的第一种truck,之后的truck都是由其中已经存在的某一种truck衍生而来,任意两种truck之间的距离是它们字符串之间不同的字符数量。求每一对有衍生关系的truck(即它们两之间的距离最小)的距离总和。 难点是将其转换为图论的知识,我们发现,对于

ThinkingLion的专栏 352

poj 1789 kruscal水题

继续水水题。。。 题目:http://poj.org/problem?id=1789 把车看成结点,车之间的距离看作权重就是一个图了,然后求最小生成树。。。 的确水题,但看题目花了挺长时间,不知道如果现场遇到这种题目会多蛋疼。。。 这题时限2000ms,但用kruscal+sort写出来wa了,换用qsort的话果断超时了,翻了下网上的题解,发现貌似得用const void *传入参数才能

水果君の日常 1612

poj 1789 Truck History(kruskal算法)

主题链接:http://poj.org/problem?id=1789 思维:一个一个点,每两行之间不懂得字符个数就看做是权值。然后用kruskal算法计算出最小生成树 我写了两个代码一个是用优先队列写的。可是超时啦,不知道为什么。希望有人能够解答。后面用的数组sort排序然后才AC。 code: 数组sort排序AC代码: #include<cstdio>...

aofan9566的博客 213

POJ 1789

POJ 1789 题目大意: 有若干个节点,他们有一个字符串表示他们的状态(7位),每两个节点间的距离是他们状态不同处的个数,求一条路径连接所有节点。 解:最小生成树= =,可是我实在不想吐槽自己了。首先是堆写错,然后交上去还是wa,怕麻烦不想写对拍然后各种挂,最后写对拍后发现因为是多组询问,而我的ans没有清零导致wa的,浪费好多时间,不解释写完我要去k课本了= =.. View Code...

weixin_30919571的博客 95

POJ 1789 --- Truck History】prim || kruskal

POJ 1789 --- Truck History】prim || kruskal 题目来源:点击进入【POJ 1789 — Truck History】 Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for vegetable delivery, o...

来日浅谈的博客 606
上一篇: poj2240
下一篇: poj2485
Last0rder
博客等级 码龄18年 50粉丝 325原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值