设一个开头的虚节点,然后建稠密图,O(n^2)。使用prim。O(n^2),保存方案,没什么好说的。

#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int k,w,n,m;
int cnt;
int map[1005][1005];
char data[1002][11][11];
int father[1005];
struct node
{
int pre,to;
}save[1005];
int prim()
{
int ans=0;
int i,j;
int vis[1005];
int dis[1005];
memset(vis,0,sizeof(vis));
memset(dis,0x7f,sizeof(dis));
int inf=dis[0];
vis[0]=1;
int min;
for (i=1;i<=k;i++)
{
dis[i]=map[0][i];
father[i]=0;
}
int u;
for (i=0;i<k;i++)
{
min=inf;
for (j=0;j<=k;j++)
if (!vis[j] && min>dis[j])
{ u=j;
min=dis[j];
}
vis[u]=1;
ans+=dis[u];
save[cnt].pre=u;save[cnt].to=father[u];
cnt++;
for (int p=0;p<=k;p++)
if (u!=p && !vis[p])
if (dis[p]>map[u][p])
{
dis[p]=map[u][p];
father[p]=u;
}
}
return ans;
} int main()
{
int i;
while (scanf("%d%d%d%d",&n,&m,&k,&w)!=EOF)
{
cnt=0;
for (i=1;i<=k;i++)
{
for (int j=0;j<n;j++)
scanf("%s",data[i][j]);
}
for (i=1;i<=k;i++)
{
map[0][i]=n*m;
map[i][0]=m*n;
}
int tmp;
for (i=1;i<=k;i++)
{
for (int j=i+1;j<=k;j++)
{
tmp=0;
for (int p=0;p<n;p++)
for (int q=0;q<m;q++)
if (data[i][p][q]!=data[j][p][q])
tmp+=w;
map[i][j]=tmp;
map[j][i]=tmp;
}
}
printf("%d\n",prim());
for (i=0;i<cnt;i++)
printf("%d %d\n",save[i].pre,save[i].to);
}
return 0;
}

  

CF 436D 最小生成树的更多相关文章

  1. CF Educational Codeforces Round 3 E. Minimum spanning tree for each edge 最小生成树变种

    题目链接:http://codeforces.com/problemset/problem/609/E 大致就是有一棵树,对于每一条边,询问包含这条边,最小的一个生成树的权值. 做法就是先求一次最小生 ...

  2. CF 160D Edges in MST 最小生成树的性质,寻桥,缩点,批量处理 难度:3

    http://codeforces.com/problemset/problem/160/D 这道题要求哪条边存在于某个最小生成树中,哪条边不存在于最小生成树中,哪条边绝对存在于最小生成树中 明显桥边 ...

  3. CF F. MST Unification (最小生成树避圈法)

    题意 给一个无向加权联通图,没有重边和环.在这个图中可能存在多个最小生成树(MST),你可以进行以下操作:选择某条边使其权值加一,使得MST权值不变且唯一.求最少的操作次数. 分系:首先我们先要知道为 ...

  4. CF Grakn Forces 2020 1408E Avoid Rainbow Cycles(最小生成树)

    1408E Avoid Rainbow Cycles 概述 非常有趣的题目(指解法,不难,但很难想) 非常崇拜300iq,今天想做一套div1时看见了他出的这套题Grakn Forces 2020,就 ...

  5. cf Inverse the Problem (最小生成树+DFS)

    题意: N个点.N行N列d[i][j]. d[i][j]:结点i到结点j的距离. 问这N个点是否可能是一棵树.是输出YES,否则输出NO. 思路: 假设这个完全图是由一棵树得来的,则我们对这个完全图求 ...

  6. Hdu 4081 最小生成树

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  7. [Usaco2007 Dec]Building Roads 修建道路[最小生成树]

    Description Farmer John最近得到了一些新的农场,他想新修一些道路使得他的所有农场可以经过原有的或是新修的道路互达(也就是说,从任一个农场都可以经过一些首尾相连道路到达剩下的所有农 ...

  8. UOJ236 IOI2016 Railroad 差分、欧拉回路、最小生成树

    传送门 将"进入路段时速度\(\leq s_i\)"转换为:"进入路段时速度恰好等于\(s_i\),并且铺设铁轨有加速和减速两种,加速无需代价,减速每\(1 km/h\) ...

  9. 算法实践--最小生成树(Kruskal算法)

    什么是最小生成树(Minimum Spanning Tree) 每两个端点之间的边都有一个权重值,最小生成树是这些边的一个子集.这些边可以将所有端点连到一起,且总的权重最小 下图所示的例子,最小生成树 ...

随机推荐

  1. Android jdbc连接mysql报错解决方案 (Communications link failure)

    最近调试安卓连接mysql真是心态爆炸,快两天才搞出来.以下整理一些常见问题. 检查manifest文件里网络权限是否打开 检查数据库IP是否有问题(包括一些沙雕错误,比如是不是在ip首或尾多了个空格 ...

  2. python 线程进程

      一 线程的2种调用方式 直接调用 实例1: import threading import time def sayhi(num): #定义每个线程要运行的函数 print("runni ...

  3. [luoguP1854] 花店橱窗布置(DP)

    传送门 f[i][j] 表示前 i 盆花,放到前 j 个花盆中的最优解 pre[i][j] 记录前驱 代码 #include <cstdio> #include <cstring&g ...

  4. 0213Zabbix通过percona监控MySQL

    因为Zabbix自带的MySQL监控没有提供可以直接使用的Key,所以一般不采用,业界的同学们都使用Percona Monitoring Plugins 监控 MySQL的方式 Percona介绍 P ...

  5. 又见GCD

    Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c.   Input ...

  6. java并发操作

    项目中常用的java并发操作 一.java8新特性java并发流操作(结合纳姆达表达式) List<String> list = new ArrayList<>(); list ...

  7. SiteMesh2-标签库

    SiteMesh包括两大标签库. 一.Decorator Tags:被用于建立装饰器页面. 1.<decorator:head/>  插入原始页面(被包装页面)的head标签中的内容(不包 ...

  8. Android GIS开发系列-- 入门季(5) FeatureLayer加载本地shp文件与要素查询

    FeatureLayer是要素图层,也是Arcgis的主要图层.用这个图层可以加载本地的shp文件.下面我们看怎样加载shp文件到MapView中.查看ArcGis API可知FeatureLayer ...

  9. HDU 1853 Cyclic Tour(最小费用最大流)

    Cyclic Tour Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others) Tota ...

  10. mvc使用mongodb时objectId序列化与反序列化

    前面有写使用自己的mvc 序列化工具即jsonNetResult.我这里结合之前写的jsonNetResult来做一个Json序列化工具,而且序列化ObjectId成一个字符串.详细代码例如以下 us ...