Dominos 2(DFS)(容器)

news/2025/2/23 15:27:23

http://acm.hdu.edu.cn/showproblem.php?pid=2754

大致意思:

有一堆骨牌,码好(当然不只是单线程,最初考虑单线程的,一直wa)

给你 n, m, l。n表示n张骨牌(从1-n标记),m表示 (x,y)对数,x倒了,y必倒,l 表示用手推倒的牌数,对应相应骨牌的标记号码。计算有几张骨牌倒了。

第一次开了10001*10001的数组来存,明显超内存了;

第二次用结构体来存(x,y);

218MS 324K 793 B C++   46MS   540K   733 B   C++


  
#include < stdio.h >
#include
< algorithm >
using namespace std;

struct tree
{
int x;
int y;
}dimo[
10001 ];

bool sign[ 10001 ];
int tot;
int N,M,L;

void DFS( int t)
{
for ( int i = 1 ; i <= M; i ++ )
if (dimo[i].x == t)
if (dimo[i].y && sign[dimo[i].y])
{ tot
++ ;
sign[dimo[i].y]
= 0 ;
DFS(dimo[i].y);
}
}

int main()
{
/* freopen("input.txt", "r", stdin); */
int case_,i,t;
while (scanf( " %d " , & case_) != EOF)
{
while (case_ -- )
{
scanf(
" %d%d%d " , & N, & M, & L);
for (i = 1 ; i <= N; i ++ )
sign[i]
= 1 ;
for (i = 1 ; i <= M; i ++ )
scanf(
" %d%d " , & dimo[i].x, & dimo[i].y);

tot
= 0 ;
for (i = 1 ; i <= L; i ++ )
{
scanf(
" %d " , & t);
if (sign[t])
{
tot
++ ;
sign[t]
= 0 ;
DFS(t);
}
}
printf(
" %d\n " , tot);
}
}
return 0 ;
}

第三次用vector来存 x 后的所有 y;明显减少很多时间;

第一次用容器,容器不错;

46MS 540K 733 B C++


  
#include < iostream >
#include
< vector >
using namespace std;

vector
< int > dimo[ 10001 ];
bool sign[ 10001 ];
int tot;
int N,M,L;

void DFS( int t)
{
if ( ! sign[t]) return ;
tot
++ ;
sign[t]
= 0 ;
int len = dimo[t].size();
for ( int i = 0 ; i < len; i ++ )
DFS(dimo[t][i]);
}

int main()
{
// freopen("input.txt", "r", stdin);
int case_,i,t,x,y;
while (scanf( " %d " , & case_) != EOF)
{
while (case_ -- )
{
scanf(
" %d%d%d " , & N, & M, & L);
for (i = 1 ; i <= N; i ++ )
{
dimo[i].clear();
sign[i]
= 1 ;
}
for (i = 1 ; i <= M; i ++ )
{
scanf(
" %d%d " , & x, & y);
dimo[x].push_back(y);
}
tot
= 0 ;
for (i = 1 ; i <= L; i ++ )
{
scanf(
" %d " , & t);
DFS(t);
}
printf(
" %d\n " , tot);
}
}
return 0 ;
}

转载于:https://www.cnblogs.com/submarinex/archive/2010/06/10/1941238.html


http://www.niftyadmin.cn/n/674080.html

相关文章

Anyway,记下我的安捷伦处面

开学快一个月了&#xff0c;始终没有进入学习的状态&#xff0c;始终觉得课堂上的知识不是我想学的、我想学的课堂上又没有。一直在寻思着找实习&#xff0c;投了5,6个简历如石沉大海&#xff0c;弄得整个九月一直在等待&#xff0c;又一次次的毫无音讯&#xff0c;让人失望。 …

javascript dom代码应用:简单的相册

最近一直对前端开发很感兴趣&#xff0c;特别是在像jquery这种流行ajax类库的帮助下&#xff0c;即使没有很好的javascript功底也能做出不错的动态效果&#xff0c;确实是方便。但我觉得这还不行&#xff0c;毕竟什么都是人家封装好的&#xff0c;得自己深入学习下原生的javasc…

八大排序算法【下】 -- 归并、快排

归并排序 归并排序&#xff08;Merge&#xff09;是将两个&#xff08;或两个以上&#xff09;有序表合并成一个新的有序表&#xff0c;即把待排序序列分为若干个子序列&#xff0c;每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 不如看图 上面的解释和图片均来…

对局问题 ——取火柴问题(转)

Description&#xff1a; 一堆火柴有N根&#xff0c;A&#xff0c;B两人轮流取出。每次可以取1根或2根&#xff0c;问先取者能否有必胜策略&#xff1f; Solution&#xff1a; 一般解答&#xff1a; 分情况讨论&#xff1a;N3k 后手胜和 N&#xff01;3k 先手胜(k为正整数)…

浅谈c++的模板机制(一) -- 函数模板

浅谈c的模板机制泛型编程函数模板为什么会出现函数模板初识函数模板函数模板语法函数模板偶遇普通函数&#xff08;重载&#xff09;模板机制的实质 参考资料 浅谈c的模板机制 泛型编程 泛型编程即以一种独立于任何特定类型的方式编写代码。可以实现算法和数据结构的分离。…

黄金期权买卖的主要内容和程序

黄金期权买卖的主要内容和程序期权&#xff0c;又称“选择权”&#xff0c;指在确定的日期或这个日期之前&#xff0c;持有人所享有的依照事先约定的价格买进或者卖出商品或期货的权利&#xff0c;而不是义务。对于期权的买方&#xff08;期权的持有者&#xff09;来说&#xf…

浅谈c++的模板机制(二) -- 类模板

初探类模板类模板做函数参数类模板的继承从一个类模板派生出一个普通类从一个类模板派生出一个类模板 初探类模板 上一篇文章简单介绍了c的模板机制以及函数模板&#xff1a;浅谈c的模板机制&#xff08;一&#xff09; – 函数模板 这篇文章主要介绍c的类模板。先来看一个…

生成图片,保存到指定目录

代码 ///<summary>///将指定的联系号码转换成图片 ///</summary>///<param name"phone">联系号码</param>///<param name"fileSaveDir">生成图片的保存路径</param>///<returns>返回生成的图片的文件名…