UPC 2170 D Equal Is Not Really Equal (欧拉路径)
题目链接:http://acm.upc.edu.cn/problem.php?id=2170
题意:给出一个字符串,比如ABACA,在这个串里,AB、BA、AC、CA各出现一次。若存在另外一个串,里面也AB、BA、AC、CA各出现一次。我们称ABACA是不唯一的。给出一个串,判断其是不是唯一。
思路:将字母看做顶点,将相邻的连有向边。那么题 目转化成这个图是不是存在两条欧拉路径。现在这个图至少有一条欧拉路径。设原串最后一个字母对应的节点为end。那么现在的图中若存在一个点u,对于这个 u至少有两个节点v1,v2,使得存在<u,v1><u,v2>,并且删掉两个中的任意一条后end都可由u到达,则说明有两个 欧拉路径。我们现在假设u只有这两个子节点v1,v2,那么原来的欧拉回路必然是走的<u,v1>或者 <u,v2>,不妨是<u,v1>,那么对于u、v1、v2、end四个点的顺序大致有两种情况:
(1)u->v1->v2->u->v2->end
(2)u->v1->u->v2->end
那么对于边<u,v2>,若将其删除后,如能够到达end,那么只能是情况(1),此时两条欧拉路径除了(1)之外另一条是
u->v2->u->v1->v2->end。另外有一种情况上面的算法不能涉及,就是ABCDA,也就是前后两个是一样
的情况,这个必然是不唯一的,因为你存在了环,如BCDAB,CDABC等。
int a[30][30],d[30];
char s[N];
int n,end,flag;
int allSame()
{
int i;
FOR0(i,n) if(s[i]!=s[0]) return 0;
return 1;
}
int h[30],last;
void DFS(int x)
{
h[x]=1;
int i;
FOR0(i,26) if(!h[i]&&a[x][i]) DFS(i);
}
int OK(int x)
{
clr(h,0);
DFS(x);
return h[last];
}
void deal()
{
int cnt,i,j;
FOR0(i,26) if(d[i]>1)
{
cnt=0;
FOR0(j,26) if(a[i][j]>0)
{
a[i][j]--;
if(OK(i)) cnt++;
a[i][j]++;
}
if(cnt>1)
{
puts("not unique");
return;
}
}
puts("unique");
}
int main()
{
rush()
{
RD(s); n=strlen(s);
int i,j;
clr(a,0); clr(d,0);
FOR0(i,n-1)
{
a[s[i]-'A'][s[i+1]-'A']++;
}
FOR0(i,26) FOR0(j,26) if(a[i][j]) d[i]++;
if(!allSame()&&s[0]==s[n-1])
{
puts("not unique");
continue;
}
last=s[n-1]-'A';
deal();
}
return 0;
}
UPC 2170 D Equal Is Not Really Equal (欧拉路径)的更多相关文章
- Scalaz(4)- typeclass:标准类型-Equal,Order,Show,Enum
Scalaz是由一堆的typeclass组成.每一个typeclass具备自己特殊的功能.用户可以通过随意多态(ad-hoc polymorphism)把这些功能施用在自己定义的类型上.scala这个 ...
- java中==与equal()方法的区别
==比较的是对象的地址,也就是是否是同一个对象: equal比较的是对象的值. Integer r1 = new Integer(900);//定义r1整型对象Integer r2 = new Int ...
- 讨论JDK的File.equal()
我们一般比较两个文件中的对象是相同的文件,通常使用java.io.File.equal().这里,equal()是不是文件内容的比较结果为.象是否指向同一个文件. File的equal()方法.实际上 ...
- ==与equal
@ 对象类型比较:(引用类型) ==和equal都表示对象引用的内存地址是否相同 对象类型继承Object并重写方法equal()用于对象的比较 @ 字符串比较: ==表示String引用的内存地址是 ...
- hashCode()方法和equal()方法的区别
本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...
- equal?, == and eql?, ===,
1.BasicObject中定义了 == 和equal?这两个方法,两个方法等价,用来比较两个对象是否是同一个对象,是的话结果就为true. 既然两者相同,为何要定义两个呢?只是为了再命名一个别名吗? ...
- missing equal sign
"UPDATE TB_BOOKINGSET REC_LOC_CODE = ?,CUSTOMER_ADDR?WHERE BOOKING_NO=? AND TRANSPORT_MODE=? &q ...
- ==和Equal()
1.a==null与 null==a null放在前面就是为了避免变量为空时 引了空指针异常 如: if(a==null) 如果a 真为空时,现在就相当用调用了变量a的方法,a 都为空了还调用他的方法 ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
随机推荐
- 夺命雷公狗---DEDECMS----16dedecms取出首页今日更新
我们这次就要来取出我们的电影和电视剧以及综艺节目: 我们首先在我们受页面的模版文件中获取电影和电视剧的标签: 我们发现这里有一大堆,我只留一个即可: 然后我们到后台更新下首页的模版,看下是否只有一个模 ...
- C++字符串和string类介绍
一.C风格字符串 ◆ 1.字符串是用字符型数组存储的,字符串要求其尾部以'\0'作为结束标志.如: char string[ ]="C++ programming language&q ...
- SQL2005中的事务与锁定(一) - 转载
----------------------------------------------------------------------- -- Author : HappyFlyStone -- ...
- 锋利的JQuery(五)
jQuery与Ajax: load: load(url) $("#resText").load("test.html") 加载所有元素 load(url ...
- DOM4J解析xml案例
- SessionHelper
MXS&Vincene ─╄OvЁ &0000009 ─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...
- mysql grant用户权限设置
MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant sele ...
- lamp环境编译(实际通过)
CentOS:5.5Apache:2.2.9PHP:5.2.6MySQL:5.0.41 条件: yum install gccyum install gcc-c++ vi/etc/yum.repos. ...
- Linux中变量#,#,@,0,0,1,2,2,*,$$,$?的含义【转】
转自:http://www.cnblogs.com/kaituorensheng/p/4002697.html 1 2 3 4 5 6 7 8 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 ...
- Hibernate,Session方法使得java对象进入持久化状态;持久化对象特征
以下情况java对象进入持久化状态: session.save()方法把临时对象转变为持久化对象. session.load()和session.get()方法得到的对象总是处于持久化状态. sess ...