当前位置: 首页 > news >正文

UVA10129 Play on Words —— 欧拉回路

题目链接:https://vjudge.net/problem/UVA-10129


代码如下:

// UVa10129 Play on Words
// Rujia Liu
// 题意:输入n个单词,是否可以排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同
// 算法:把字母看作结点,单词看成有向边,则有解当且仅当图中有欧拉路径。注意要先判连通
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn = 10000 + 5;

int pa[256], used[256], deg[256]; // 是否出现过;度数
char word[maxn];
int n, cc;

int findset(int x) { return ( pa[x] != x ? pa[x] = findset(pa[x]) : x ); }

void init()
{
    memset(used, 0, sizeof(used));
    memset(deg, 0, sizeof(deg));

    for(int ch = 'a'; ch <= 'z'; ch++)
        pa[ch] = ch; // 初始化并查集

    cc = 26; // 连通块个数
}

void solve()
{
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
    {
        scanf("%s", word);
        char c1 = word[0];
        char c2 = word[strlen(word)-1];
        deg[c1]++;
        deg[c2]--;
        used[c1] = used[c2] = 1;

        int s1 = findset(c1);
        int s2 = findset(c2);
        if(s1 != s2)
        {
            pa[s1] = s2;
            cc--;
        }
    }

    vector<int> d;
    for(int ch = 'a'; ch <= 'z'; ch++)
    {
      if(!used[ch])
        cc--; // 没出现过的字母

      else if(deg[ch] != 0)
        d.push_back(deg[ch]);
    }

    int  ok = false;
    if(cc == 1 && (d.empty() || (d.size() == 2 && (d[0] == 1 || d[0] == -1))))
        ok = true;

    if(ok)
        printf("Ordering is possible.\n");
    else
        printf("The door cannot be opened.\n");
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        init();
        solve();
    }
    return 0;
}


转载于:https://www.cnblogs.com/DOLFAMINGO/p/7538701.html

相关文章:

  • [Apio2012]dispatching 左偏树
  • 杭电1007-----C语言实现
  • 解决云服务器ECS,windows server 2012不能安装SQL Server 2012,不能安装.NET Fromework 3.5...
  • 自适应相关知识点1
  • JavaScript 原型链
  • Mysql数据库批量添加数据
  • Spring MVC解决中文乱码(post get)(转)
  • 网站添加用户风险测评
  • yii2邮件配置教程,报Expected response code 250 but got code 553原因
  • ICON 收集
  • hibernate3 和hibernate4的一点小变动
  • 荣获MVP感想
  • 错误简单记录
  • js读取本地txt文件中的json数据
  • HDU 2141 Can you find it?(二分)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Android开源项目规范总结
  • Java IO学习笔记一
  • JavaScript函数式编程(一)
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • node和express搭建代理服务器(源码)
  • Twitter赢在开放,三年创造奇迹
  • ViewService——一种保证客户端与服务端同步的方法
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 分享几个不错的工具
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 好的网址,关于.net 4.0 ,vs 2010
  • 记一次删除Git记录中的大文件的过程
  • 浏览器缓存机制分析
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 延迟脚本的方式
  • 用jQuery怎么做到前后端分离
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • %@ page import=%的用法
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)二分查找 超详细
  • (备忘)Java Map 遍历
  • (二)windows配置JDK环境
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (规划)24届春招和25届暑假实习路线准备规划
  • (区间dp) (经典例题) 石子合并
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)基于IDEA的JAVA基础12
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)ABI是什么
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)