10054 - The Necklace(欧拉回路+回路打印)

2024-08-24 04:48

本文主要是介绍10054 - The Necklace(欧拉回路+回路打印),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:10054 - The Necklace


题目大意:给出N给珠子,每个珠子都有两种颜色,各半,看能不能找出每种组合使珠子连成一串,颜色相同的珠子才能相邻。


解题思路:欧拉回路+ 回路打印。

刚开始的时候我直接以珠子的个数来考虑是否有欧拉回路,这样的话1000*1000 *1000...次判断导致超时了。这里可以判断颜色,颜色都访问过了,就说明这串珠子是连通的。然后要输出的时候就在按照珠子的个数来考虑。


#include<stdio.h>
#include<string.h>const int N = 55;
int t, n, map[N][N], v[N], ino[N];void dfs(int x, int &m) {v[x] = 1;m++;for(int  i = 1; i <= 50; i++)if(map[x][i] && !v[i]) dfs(i, m);}void printff(int x) {for(int i = 1; i <= 50; i++)if(map[x][i]) {map[x][i]--;map[i][x]--;printff(i);printf("%d %d\n", i, x);}}int color_num () {int num = 0;for(int i = 1 ; i <= 50; i++)if(ino[i])num++;return num;			
}int main() {scanf("%d", &t);int num = t;while(t--){//initmemset(map, 0, sizeof(map));memset(v, 0, sizeof(v));memset(ino, 0, sizeof(ino));scanf("%d", &n);int i, x, y;for(i = 1; i <= n; i++) {scanf("%d%d", &x, &y);map[x][y] ++;map[y][x] ++;ino[y]++;ino[x]++;}//findint ok = 0;for(i = 1; i <= 50; i++) if(ino[i] % 2) {ok = -1;break;}printf("Case #%d\n", num - t);if(ok == -1)printf("some beads may be lost\n");else {dfs(x, ok);if(ok == color_num())printff(x);elseprintf("some beads may be lost\n");}if(t)printf("\n");}return 0;
}


这篇关于10054 - The Necklace(欧拉回路+回路打印)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101495

相关文章

usaco 1.1 Broken Necklace(DP)

直接上代码 接触的第一道dp ps.大概的思路就是 先从左往右用一个数组在每个点记下蓝或黑的个数 再从右到左算一遍 最后取出最大的即可 核心语句在于: 如果 str[i] = 'r'  ,   rl[i]=rl[i-1]+1, bl[i]=0 如果 str[i] = 'b' ,  bl[i]=bl[i-1]+1, rl[i]=0 如果 str[i] = 'w',  bl[i]=b

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

欧拉系统 kernel 升级、降级

系统版本  cat  /etc/os-release  NAME="openEuler"VERSION="22.03 (LTS-SP1)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP1)"ANSI_COLOR="0;31" 系统初始 kernel 版本 5.10.0-136.12.0.

fastreport打印trichedit分页问题的解决

用fastreport来打印richedit里面的内容。刚开始放一个frxrichview组件到报表上,然后在 var str: TMemoryStream; begin    begin      str:= TMemoryStream.Create;      CurrRichRecord.richedit.Lines.SaveToStream(str);      str.Posit

模具要不要建设3D打印中心

随着3D打印技术的日益成熟与广泛应用,模具企业迎来了自建3D打印中心的热潮。这一举措不仅为企业带来了前所未有的发展机遇,同时也伴随着一系列需要克服的挑战,如何看待企业引进增材制造,小编为您全面分析。 机遇篇: 加速产品创新:3D打印技术如同一把钥匙,为模具企业解锁了快速迭代产品设计的可能。企业能够迅速将创意转化为实体模型,缩短产品从设计到市场的周期,抢占市场先机。 强化定制化服务:面

nyoj99(并查集+欧拉路+dfs)

单词拼接 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串。 前一个单词的结尾应该与下一个单词的道字母相同。 如 aloha dog arachnid gopher tiger rat   可以拼接成:aloha.arachnid.dog.gopher.rat.tiger 输入 第一行是一个整

nyoj42(并查集解决欧拉回路)

一笔画问题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。   输入 第一行只有一个正整数N(N<=10)表示测试数据的组数。 每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<

Java项目中,配置打印 JDBC 日志的几种方法

在 IDEA 项目中,如果你想打印 JDBC 日志,可以通过配置日志框架(如 Logback 或 Log4j)来实现。Spring Boot 使用的默认日志框架是 Logback,你可以通过在 application.yml 文件中配置日志级别来打印 JDBC 日志。 方法 1: 使用 application.yml 配置 JDBC 日志 logging:level:# 显示 SQL 语句co