【POJ 1789】Truck History(最小生成树)
题意:距离定义为两个字符串的不同字符的位置个数。然后求出最小生成树。
#include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int N=2001; const int M=4000001; char code[N][10]; int f[N];//并查集 struct edge{ int u,v,w; }e[M]; int n,tot; void add(int u,int v,int w){ e[tot].u=u;e[tot].v=v;e[tot++].w=w; } bool cmp(edge a,edge b){ return a.w<b.w; } int find(int x){ if(f[x]==-1)return x; return f[x]=find(f[x]); } int Kruskal(){ memset(f,-1,sizeof f); sort(e,e+tot,cmp); int cnt=0,ans=0; for(int i=0;i<tot;i++){ int u=e[i].u,v=e[i].v,w=e[i].w; int fu=find(u),fv=find(v); if(fu!=fv){ ans+=w; f[fu]=fv; cnt++; } if(cnt==n-1)break; } return ans; } void solve(){ for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { int dis=0; for(int k=0;k<7;k++) if(code[i][k]!=code[j][k])dis++; add(i,j,dis); } } int main(){ while(scanf("%d ",&n),n){ tot=0; for(int i = 1; i <= n; i++) gets(code[i]); solve(); printf("The highest possible quality is 1/%d.\n", Kruskal()); } return 0; }
┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· Tinyfox 发生重大改版