博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Colored Sticks(trie)
阅读量:5079 次
发布时间:2019-06-12

本文共 1967 字,大约阅读时间需要 6 分钟。

题意:给一些木棒,木棒两端图上颜色,将端点颜色相同的木棒连在一起,问是否能连成一条直线。

思路:将两端的颜色看成点,将木棒看成边,判断是否构成欧拉路。

欧拉路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,

称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。

判断欧拉路是否存在的方法

有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。

无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。

判断欧拉回路是否存在的方法

有向图:图连通,所有的顶点出度=入度。

无向图:图连通,所有顶点都是偶数度。

其中判断图的连通性用并查集。

1 #include 
2 #include
3 4 const int N=500050; 5 using namespace std; 6 7 struct trie 8 { 9 int id;10 trie *next[26];11 trie()12 {13 id = 0;14 for (int i = 0; i < 26; i ++)15 next[i] = NULL;16 }17 }*root;18 int degree[N];19 int f[N],cnt;20 void init()21 {22 for (int i = 0; i < N; i ++)23 {24 degree[i] = 0;25 f[i] = i;26 }27 cnt = 0;28 }29 int find(int x)30 {31 if (x!=f[x])32 f[x] = find(f[x]);33 return f[x];34 }35 void merge(int x,int y)36 {37 x = find(x);38 y = find(y);39 f[x] = y;40 }41 int find_id(char s[])42 {43 int i = 0;44 trie *p = root;45 while(s[i]!='\0')46 {47 if (p->next[s[i]-'a']==NULL)48 p->next[s[i]-'a'] = new trie;49 p = p->next[s[i++]-'a'];50 }51 if (p->id==0)52 p->id = ++cnt;53 return p->id;54 }55 int main()56 {57 //freopen("sad.txt", "r", stdin);58 int id1,id2;59 char s1[12],s2[12];60 init();61 root = new trie;62 while(~scanf("%s%s",s1,s2))63 {64 65 id1 = find_id(s1);66 id2 = find_id(s2);67 degree[id1]++;68 degree[id2]++;69 merge(id1,id2);70 }71 int count = 0;72 int father = find(1);73 for (int i = 1; i <= cnt; i ++)74 {75 if (degree[i]%2)76 count++;77 if(count > 2||find(i)!=father)78 {79 printf("Impossible\n");80 return 0;81 }82 }83 printf("Possible\n");84 return 0;85 }
View Code

 

 

转载于:https://www.cnblogs.com/lahblogs/p/3272756.html

你可能感兴趣的文章
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
PIGOSS
查看>>
软件目录结构规范
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
蓝桥杯-分小组-java
查看>>
Android Toast
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>