这题给的一个教训: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. flask-uploads扩展的使用笔记

    涉及的flask扩展 flask-uploads flask的一个文件上传扩展, 提供了UploadSet这个概念 flask-wtf(中文) 很强大的表单的扩展 flask-bootstrap bo ...

  2. web技术人员-推荐书籍

    学习是技术人员成长的基础,本次分享20本技术方面的书籍,这些书不是每一本都是经典,但是每一本都有其特点.以下20本大部分本人都看过,因此推荐给大家.(本次推荐的20本只是一个参考,比如像Head Fi ...

  3. Verilog学习笔记基本语法篇(十)········ 常用系统函数

    $display 和 $write 任务 格式: $display (p1,p2,...,pn); $write (p1,p2,..,pn); 这两个函数和系统的任务作用是用来输出信息,即将参数p2到 ...

  4. mysql并发insert deadlock分析以及解决,无delete/update/for update

    关于并发insert操作发生deadlock这个情况,一直有很多争议,而且网上的帖子所有的例证和模拟其实不一定反映了真实的情况,例如:https://www.percona.com/blog/2012 ...

  5. TeamCity配置笔记

    1.编译sln 2.发布网站 3.重复代码检测 4.代码分析 5.单元测试&覆盖率测试 查看代码覆盖率 7.代码签入时自动触发编译 8.通知 1.在teamcity安装目录中找到TrayNot ...

  6. css3属性小结

    /*border-radius*/ .demo2{ border:2px solid #a1a1a1; padding:10px 40px; background:#dddddd; width:300 ...

  7. mongodb driver c#语法

    Definitions and BuildersThe driver has introduced a number of types related to the specification of ...

  8. sass开发过程中遇到的几个坑

    1.安装sass被墙的问题 安装完`ruby`后,打开`ruby cmd` 输入`gem install sass`,安装失败,有可能是镜像源的问题,也有可能是墙的问题. 因为公司内网的奇葩限制,各种 ...

  9. Oracle Spatial中SDO_Geometry详细说明[转]

    在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...

  10. iOS didReceiveMemoryWarning 的处理

    当iOS触发didReceiveMemoryWarning这个方法的时候,我们一般会做一些手动处理,强制清理掉一些目前不用的数据.但是这个方法并不只是单纯的通知开发者你的内存已经吃紧了,系统通知你的同 ...