题目传送门

题目大意:给你若干根木棍,每根木棍有前后两种颜色,连接两根木棍需要前后颜色相同,求能否将所有木棍连接在一起。

Solution:

不要将木棍看成点,将颜色看成点。

其实就是求是否存在欧拉路径。

有欧拉路径要满足两个条件:

  图是连通图。

  没有或只有两个入度为奇数的点。

判断连通性用并查集。

枚举每个点判断入度就好了。

code:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; struct trie{
int tr[][],v[],cnt,tot;
trie(){memset(tr,,sizeof tr),memset(v,,sizeof v),cnt=tot=;}
int add(char *a)
{
int len=strlen(a),now=;
for(int i=;i<len;i++){
if(!tr[now][a[i]-'a'])tr[now][a[i]-'a']=++cnt;
now=tr[now][a[i]-'a'];
}
if(!v[now])v[now]=++tot;
return v[now];
}
}T;
char S1[],S2[];
int into[],fa[];
int getf(int x){return x==fa[x]?x:fa[x]=getf(fa[x]);} int main()
{
// freopen("x.txt","r",stdin);
for(int i=;i<=;i++)fa[i]=i;
while(cin>>S1>>S2){
int k1=T.add(S1),k2=T.add(S2);
into[k1]++,into[k2]++;
fa[getf(k1)]=getf(k2);
}
int ans=;
for(int i=;i<=T.tot;i++)
if(fa[getf(i)]==i)ans++;
if(ans>)return puts("Impossible"),;
ans=;
for(int i=;i<=T.tot;i++){
if(into[i]&)ans++;
}
if(!ans||ans==)puts("Possible");
else puts("Impossible");
return ;
}

最新文章

  1. spring MVC @Resource不支持Lazy加载
  2. DOS与Linux的换行字符
  3. C语言 Linux内核链表(企业级链表)
  4. CSS媒体查询,CSS根据不同的分辨率显示不同的样式
  5. Java把内存划分为4个部分 1. 代码区 1、栈区 3、堆区 4、静态区域
  6. AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
  7. python_基本语法_01
  8. LeetCode_Simplify Path
  9. java集合之Map_keySet_entrySet
  10. dev中 使用一些控件后,窗体屏蔽右键某些菜单
  11. javascript variables 变量
  12. NetBox v2.8下载使用指南
  13. 更改 android realtek的系统权限
  14. udp和tcp
  15. python3:操作excel文件
  16. #if和#ifdef的区别
  17. python 模块 不可不知的知识点
  18. 自己DIY出来一个JSON结构化展示器
  19. 记录一下putty的pscp的用法【转】
  20. Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用

热门文章

  1. [WebKit] JavaScriptCore解析--基础篇 (一)JSC与WebCore
  2. 【jQuery】todolist
  3. centos上nginx的安装
  4. 大话Linux内核中锁机制之原子操作、自旋锁
  5. JAVA语言编程思维入门
  6. CentOS7安装Oracle11g R2
  7. 升级MAC OS到10.13, 10.14系统后UNITY工程无法加载资源的解决办法
  8. [&#128175;原]Javascript,我们来用js在网页中识别鼠标手势
  9. UML架构设计师必备神器
  10. let与var的区别,为什么什么要用let?