Truck History POJ - 1789 (为什么prim算法用优先队列这题会Runtime error ,求教,急(一直没想同))

题意:给出n个长度为7的字符串,每个字符串代表一个车,定义车的距离是两个字符串间不同字母的个数,题目要求的数不同的车的距离的最小值,即所求的就是最小生成树
思路:普通的prim算法可以过,优先队列优化的就过不了。
为什么啊,求教!!!

prim_less 代表普通的prim算法,prim是用队列优化过的(图示用前向星存储的)。
我的算法:
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <cstring>
#include <cmath>
#include <set>
#include <map>
using namespace std;
const int maxn=1e6+5;
const int INF=0x3f3f3f3f;
typedef pair<int,int>pp;
int Map[2001][2001];
bool vis[maxn];
int dist[maxn];
int head[3*maxn];
int cnt ;
struct node
{
int data,to,next;
}e[maxn];
void add(int x,int y,int z)//前向星存图
{
e[cnt].to=y;
e[cnt].data=z;
e[cnt].next=head[x];
head[x]=cnt++;
}
int n,m;
char s[2005][8];
int get_distance(int a,int b)//求两点之间的距离
{
int ans =0;
for (int i=0;i<7;i++)
{
if(s[a][i]!=s[b][i])
ans++;
}
return ans;
}
void prim(int st)//优先队列优化,但是挂了
{
int i,j,k;
fill(vis,vis+maxn,0);
fill(dist,dist+maxn,INF);
priority_queue<pp,vector<pp>,greater<pp> >q;
dist[st]=0;
q.push(pp(0,st));
int ans =0;
while (!q.empty())
{
pp p=q.top();
int u=p.second;
if(vis[u])
continue;
ans+=dist[u];
vis[u]=1;
q.pop();
for (i=head[u];i!=-1;i=e[i].next)
{
node w=e[i];
if(dist[w.to]>w.data)
{
dist[w.to]=w.data;
q.push(pp(w.data,w.to));
}
}
}
cout<<"The highest possible quality is 1/"<<ans<<".\n";
}
void prim_less(int st)//普通算法
{
fill(dist,dist+maxn,INF);
fill(vis,vis+maxn,0);
int i,j,k;
dist[st]=0;
// vis[st]=1;
// for (i=0;i<n;i++)
// dist[i]=Map[st][i];
int ans =0;
while (1)
{
int minn=INF;
int u=-1;
for (i=0;i<n;i++)
{
if(minn>dist[i]&&!vis[i])
{
minn=dist[i];
u=i;
}
}
if(u==-1)
break;
vis[u]=1;
ans+=dist[u];
for (i=0;i<n;i++)
dist[i]=min(dist[i],Map[u][i]);
}
cout<<"The highest possible quality is 1/"<<ans<<".\n";
}
int main()
{
// std::ios::sync_with_stdio(0);
// cin.tie(0);
int x,y,z;
int i,j,k;
while (~scanf("%d",&n))
{
if(!n)
break;
cnt=0;
fill(head,head+maxn,-1);
for (i=0;i<n;i++)
scanf("%s",s[i]);
for (i=0;i<n;i++)
for (j=i+1;j<n;j++)
{
int temp=get_distance(i,j);
add(i,j,temp);
add(j,i,temp);
// Map[i][j]=Map[j][i]=temp;//prim_less
}
prim(0);
// prim_less(0);
}
return 0;
}

相关推荐
游戏流水数据监控系统:从实时采集到跨地区排名计算
游戏流水数据是衡量游戏商业表现的核心指标,涵盖应用内购买、道具销售等所有付费行为的总和。其计算原理基于实时营收金额、增长率、付费率等多维度因素,通过流处理技术实现分钟级更新。在技术价值层面,准确的流水监控能帮助开发者优化运营策略,提升营收效率。特别是在跨服架构设计中,需要解决时区差异、货币汇率换算等数据同步挑战。本文以《异环》游戏为例,详细介绍了基于Kafka、Redis的技术栈搭建,以及如何通过地区权重算法实现多平台排名聚合,为游戏数据分析提供完整的工程实践方案。
AI编排:MuleSoft与LangChain混合架构实战指南
AI编排(AI Orchestration)是一种面向企业生产环境的工程范式,旨在弥合大语言模型(LLM)能力与封闭业务系统(如SAP、Salesforce)之间的数据断层。其核心原理是解耦数据接入、安全治理与AI推理——由集成平台(如MuleSoft)统一管控API连接、OAuth鉴权、GDPR脱敏和可观测性,而LangChain专注多步推理、RAG检索与Agent调度。这种分工带来显著技术价值:保障高并发稳定性、满足合规审计要求、支持模型热替换与AI服务降级。典型应用场景包括销售流失预测、智能合同分析、
Gemma 4:专为本地AI Agent优化的4B轻量级结构化推理模型
AI Agent的核心挑战在于结构化输出的稳定性与本地部署的可行性,这依赖于模型对Thought-Action-Observation流程的理解能力、JSON格式生成的确定性,以及对中文、工具名等关键token的精准切分。Gemma 4作为40亿参数的Instruct-Tuned模型,通过分层Transformer架构、定制化Tokenizer(支持中文标点与工具名白名单)、面向Tool-Calling的监督微调,以及原生GGUF量化支持,在MacBook Air、树莓派5等8GB内存设备上实现低延迟、高准
用LLM API搭建自然语言数据库查询机器人:Text-to-SQL完整实践指南
随着大语言模型能力的普及,自然语言转SQL(Text-to-SQL)正在成为企业数据查询与Web应用交互的重要技术方向。传统的BI报表和后台列表无法满足用户灵活问数的需求,而基于LLM API构建的数据库查询机器人,可以让用户直接用中文提问,系统自动完成意图理解、SQL生成、安全校验与结果返回。本文从Text-to-SQL的基本原理出发,介绍如何借助FastAPI、SQLAlchemy和OpenAI兼容接口,快速搭建一套可用的数据问答Web应用。内容涵盖系统架构设计、Prompt模板组装、SQL只读校验、数
C++构建幼儿健康监测系统:架构设计与工程实践
在物联网和嵌入式系统领域,高性能数据处理与实时系统开发是核心技术挑战。C++凭借其接近硬件的操作能力、极高的运行效率和对内存的精细控制,成为处理实时数据流、进行复杂算法分析的理想选择。其技术价值在于能够构建高可靠、低延迟的系统,广泛应用于工业控制、消费电子及健康监测等场景。本文以“幼儿健康智慧系统”为例,深入探讨如何运用C++实现一个分层解耦的架构,涵盖硬件抽象、多传感器数据采集的并发处理、基于规则引擎的健康评估,以及如何与MySQL数据库进行高效交互。通过结合多线程编程、异步I/O和性能调优等工程实践,展


