poj 2513 无向图欧拉路+Trie
2016-07-12 19:27
357 查看
题意:
给出一些木棍,每个木棍两端有两种颜色,不同的木坤如果首尾颜色相同,那么就可以连接起来,问是否所有的木棍看可以连成一条线?
分析:
这题跟Uva10129单词那题几乎是一样的,只不过那题是有向图,因为单词的首尾是固定的嘛!而这题是无向图,无向图的话先判断一下是否是连通图,然后再判断一下每个点的度,如果没有奇度点或者奇度点只有两个那么是可以构成无向欧拉图的。把不同颜色当做不同的点,用Trie树给每种颜色分配一个ID值,来区分不同颜色,然后一根木棍上的两种颜色用并查集连边,最后判断整个图是否连通,如果连通在判断每个点的度。
给出一些木棍,每个木棍两端有两种颜色,不同的木坤如果首尾颜色相同,那么就可以连接起来,问是否所有的木棍看可以连成一条线?
分析:
这题跟Uva10129单词那题几乎是一样的,只不过那题是有向图,因为单词的首尾是固定的嘛!而这题是无向图,无向图的话先判断一下是否是连通图,然后再判断一下每个点的度,如果没有奇度点或者奇度点只有两个那么是可以构成无向欧拉图的。把不同颜色当做不同的点,用Trie树给每种颜色分配一个ID值,来区分不同颜色,然后一根木棍上的两种颜色用并查集连边,最后判断整个图是否连通,如果连通在判断每个点的度。
#include<iostream> #include<cstring> #include<vector> #include<cstdio> using namespace std; const int maxnode=5e6+10; const int N=500000+10; struct Trie { int ch[maxnode][26]; int val[maxnode]; int sz,id; void clear(){id=1;sz=1;memset(ch[0],0,sizeof(ch[0]));} int idx(char c){return c-'a';} int insert(const char *s) { int u=0,n=strlen(s); for(int i=0;i<n;i++){ int c=idx(s[i]); if(!ch[u][c]){ memset(ch[sz],0,sizeof(ch[sz])); val[sz]=0; ch[u][c]=sz++; } u=ch[u][c]; } if(val[u]==0)val[u]=id++; return val[u]; } }; char a[11],b[11]; int fa ,in ; int findfa(int x){return x==fa[x]?x:fa[x]=findfa(fa[x]);} Trie trie; int main() { //freopen("f.txt","r",stdin); for(int i=0;i<N;i++)fa[i]=i; memset(in,0,sizeof(in)); trie.clear(); while(~scanf("%s%s",a,b)){ int ida=trie.insert(a); int idb=trie.insert(b); in[ida]++;in[idb]++; int x=findfa(ida),y=findfa(idb); if(x!=y)fa[x]=y; } int num=0; for(int i=1;i<trie.id;i++)if(findfa(i)==i)num++; if(num>1){ printf("Impossible\n");return 0; } num=0; for(int i=1;i<trie.id;i++)if(in[i]&1)num++; if(num==0||num==2)printf("Possible\n"); else printf("Impossible\n"); return 0; }
相关文章推荐
- HibernateDaoSupport详解
- DOM操作技术之动态添加script和样式
- 这些年看过的一些技术博客或网址
- 数据结构---图的存储结构
- UML的使用
- 传递一个Parcelable正常,传递两个Null
- 聚集索引和非聚集索引的区别,何时创建索引
- untiy 3d ShaderLab_第6章_VertexLit渲染路径_4_顶点照明和Unity存放光源的第三种方式
- Java编程中操作XML文件(解析方法一:DOM)
- Laravel中使用Redis
- 1.APP后端开发系列:登陆系统设计中的注意问题
- 【bzoj4554】【Tjoi2016】【Heoi2016】【游戏】【二分图匹配】
- cf 102 A(暴力)
- 错误信息:Address already in use: connect
- 使用virtualenv独立python环境
- ajax返回object Object解决方法
- leetcode343 Integer Break java
- 内存映射文件处理大文件
- 【Tjoi2016&Heoi2016】排序
- socket连接库,兼容ipv6,ipv4,为IOS上架做准备