这题给的一个教训:Codeforces没有超时这个概念。本来以为1000*(1000+1)/2*10*10要超时的。结果我想多了。

这题由于k层都可能有关系,所以建一个图,每两个点之间连边,边权为n*m和他们之间的差值*w的最小值,然后求一个最小生成树就可以得出结果。且可以证明不会存在环。由于边比较稠密,用Prim算法求最小生成树。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define Mod 1000000007
using namespace std;
#define N 2007 char mp[][][];
int G[][],from[];
int n,m,res,id,k,w;
int vis[],len[]; struct Ans
{
int ind,pre;
}ans[]; int min(int ka,int kb)
{
if(ka < kb)
return ka;
return kb;
} int dif(char a[][],char b[][])
{
int cnt = ;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(a[i][j] != b[i][j])
cnt++;
}
}
return cnt;
} void Prim()
{
int i,j,tag,mini;
res = ;
id = ;
memset(vis,,sizeof(vis));
memset(from,,sizeof(from));
for(i=;i<=k;i++)
len[i] = n*m; //最大为n*m
for(i=;i<=k;i++)
{
mini = Mod;
for(j=;j<=k;j++)
{
if(!vis[j] && len[j] < mini)
{
mini = len[j];
tag = j;
}
}
if(mini == Mod)
return;
res += len[tag];
if(len[tag] == n*m)
ans[id].ind = tag,ans[id++].pre = ;
else
ans[id].ind = tag,ans[id++].pre = from[tag];
vis[tag] = ;
for(j=;j<=k;j++)
{
if(!vis[j] && len[j] > G[tag][j])
{
len[j] = G[tag][j];
from[j] = tag;
}
}
}
} int main()
{
int i,j;
while(scanf("%d%d%d%d",&n,&m,&k,&w)!=EOF)
{
id = ;
for(i=;i<=k;i++)
{
for(j=;j<n;j++)
scanf("%s",mp[i][j]);
}
int T = n*m;
for(i=;i<=k;i++)
{
for(j=i+;j<=k;j++)
G[j][i] = G[i][j] = min(dif(mp[i],mp[j])*w,T);
G[i][i] = ;
}
Prim();
printf("%d\n",res);
for(i=;i<id;i++)
printf("%d %d\n",ans[i].ind,ans[i].pre);
}
return ;
}

Codeforces Zepto Code Rush 2014 -C - Dungeons and Candies的更多相关文章

  1. Zepto Code Rush 2014——Dungeons and Candies

    题目链接 题意: k个点,每一个点都是一个n * m的char型矩阵.对与每一个点,权值为n * m或者找到一个之前的点,取两个矩阵相应位置不同的字符个数乘以w.找到一个序列,使得全部点的权值和最小 ...

  2. Zepto Code Rush 2014 B - Om Nom and Spiders

    注意题目给的是一个nxm的park,设元素为aij,元素aij 有4种可能U(上移),D(下移),L(左移),R(右移) 假设第i行第j列元素aij(注意元素的索引是从0开始的) 当aij为D时,此时 ...

  3. Zepto Code Rush 2014 A. Feed with Candy

    此题用贪心求解, 首先将caramel drop类别的糖果按照高度从小到大排序,如果高度相同,按照重量从小到大排序 将fruit drop类别的糖果按照高度从小到大排序,如果高度相同,按照重量从小到大 ...

  4. CF Zepto Code Rush 2014 B. Om Nom and Spiders

    Om Nom and Spiders time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  5. CodeForces ZeptoLab Code Rush 2015

    拖了好久的题解,想想还是补一下吧. A. King of Thieves 直接枚举起点和5个点之间的间距,进行判断即可. #include <bits/stdc++.h> using na ...

  6. Codeforces - ZeptoLab Code Rush 2015 - D. Om Nom and Necklace:字符串

    D. Om Nom and Necklace time limit per test 1 second memory limit per test 256 megabytes input standa ...

  7. Codeforces ZeptoLab Code Rush 2015 D.Om Nom and Necklace(kmp)

    题目描述: 有一天,欧姆诺姆发现了一串长度为n的宝石串,上面有五颜六色的宝石.他决定摘取前面若干个宝石来做成一个漂亮的项链. 他对漂亮的项链是这样定义的,现在有一条项链S,当S=A+B+A+B+A+. ...

  8. Zepto Code Rush 2014-A. Feed with Candy(HACK)

    A. Feed with Candy time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. Dungeons and Candies

    Zepto Code Rush 2014:http://codeforces.com/problemset/problem/436/C 题意:k个点,每个点都是一个n * m的char型矩阵.对与每个 ...

随机推荐

  1. ahjesus 部署lighttpd

    这个就不写了,直接传送门过去看,按照说的做就可以了 如果你想要安装最新版的,传送门 需要注意的是configure这一步,你看完他的help以后还要输入 ./configure 才能继续下一步 再就是 ...

  2. Silverlight的TextWrapping

    Silverlight中TextBox的TextWrapping属性,作用是获取或设置 TextBlock 对文本进行换行的方式. 默认值为 TextWrapping.NoWrap. TextWrap ...

  3. android Adapter剖析理解

    UI控件都是跟Adapter(适配器)打交道的 Adapter: 是用来帮助控件填充数据的中间桥梁 (在开发中大多数Textview控件的内容是依靠数据库传递并显示的如:新闻类) Adapter: 将 ...

  4. 【使用 DOM】使用 Window 对象

    1. 获取 Window 对象 可以用两种方式获得Window对象.正规的HTML5方式是在Document对象上使用defaultView属性.另一种是使用所有浏览器都支持的全局变量window . ...

  5. FME2014汉化问题

    问题:FME2014汉化包安装上不起作用,安装环境是是Win7 64位,FME是64位版本的,默认位置在Program Files\FME下,而汉化包安装默认位置在Program Files (x86 ...

  6. AutoCAD .NET二次开发(四)

    在CAD中,属性信息一般是以注记的形式存在,但当属性数据内容较多时,显示就成了问题.扩展属性(Xdata)可以解决这一问题,比如南方Cass中就利用了这一点.我们经常用Lisp来读取操作扩展属性. 查 ...

  7. Oracle执行计划与统计信息的一些总结

    [日期:2011-08-05]来源:Linux社区  作者:wangshengfeng1986211[字体:大 中 小] 2010-07-01 15:03 1.SET AUTOTRACE ON EXP ...

  8. thinkPHP学习笔记(2)

    1.调试模式 设置调试模式部分代码如下: <?php define('APP_DEBUG',TRUE); // 开启调试模式 常量定义代码 require '/ThinkPHP框架所在目录/Th ...

  9. swift GCD使用指南

    swift GCD使用指南 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适 ...

  10. 自己使用 1.C语言历史以及特点。

    1. C语言的发展及特点? C在1969--1973年间与Unix操作系统同时诞生:最富创造性的时期是1972年.另一次大的变化发生在1977到1979年间,当Unix系统的可移植性得到证明时.在后一 ...