题目链接:http://poj.org/problem?id=2513

思路很容易想到就是判断欧拉通路

预处理时用字典树将每个单词和数字对应即可

刚开始在并查集处理的时候出错了

代码:

 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
int color;
#define maxn 26
#define MAX 500010
int parent[MAX];
int degree[MAX];
class Trie
{
public:
bool flag;
int id;
Trie *next[maxn];
};
Trie *root=new Trie;
void init()
{
memset(degree,,sizeof(degree));//存放各个点的度数
memset(parent,-,sizeof(parent));
Trie *q=root;//字典树初始化
for(int i=;i<maxn;i++)
q->next[i]=NULL;
q->flag=false;
q->id=;
}
/* 并查集构建并判断是否为连通图*/
int find(int x)
{
if(parent[x]==-) return x;
return parent[x]= find(parent[x]); } void Union(int u,int v)
{
int r1=find(u);
int r2=find(v); if(r1!=r2)
parent[r1]=r2;
}
int insert(char *s)
{
Trie *p =root; for(int i=; s[i]!='\0' ;i++)
{
int d=s[i]-'a'; if(p->next[d]==NULL)
{
Trie *temp=new Trie;
for(int j=;j<maxn;j++)
temp->next[j]=NULL;
temp->flag=;
temp->id=;
p->next[d]=temp;
}
p=p->next[d]; }
if(p->flag)
{
return p->id;
}
else
{
p->flag=;
p->id=color++;
return p->id;
} }
void del_trie(Trie * p)
{
for(int i=;i<maxn;i++)
if(p->next[i])
del_trie(p->next[i]); free(p);
}
int main()
{
char s1[],s2[];
init();
color=;
while(scanf("%s%s",s1,s2)!=EOF)
{
int num1=insert(s1);
int num2=insert(s2); degree[num1]++;
degree[num2]++;
Union(num1,num2); }
int cnt1=,cnt2=;
for(int i=;i<color;i++)//判断是佛否含欧拉通路
{
if(parent[i]==-) cnt1++;
if(degree[i]%==) cnt2++;
if(cnt1>) break;
if(cnt2>) break;
} if((cnt1== || cnt1==) &&(cnt2== || cnt2==))
printf("Possible\n");
else printf("Impossible\n");
// del_trie(root);
return ; }

最新文章

  1. 如何通过ArcMap Add-in机制实现十字叉线地理配准工具
  2. 从一个数组中提取出第start位到第end位
  3. [已解决] java.net.InetAddress.getHostName() 阻塞问题
  4. ZooKeeper系列4:ZooKeeper API简介及编程
  5. [转] linux中pam模块
  6. PAT乙级 1005. 继续(3n+1)猜想 (25)
  7. BZOJ 3144 切糕(最小割)
  8. c++学习_1
  9. [DEncrypt] DESEncrypt--加密/解密帮助类 (转载)
  10. JavaScript 小技巧汇总
  11. IOC:AutoFac使用demo
  12. NOSQL EYE开源
  13. Tinc VPN
  14. nyoj358 取石子(五) 斐波那契博弈
  15. Spring Boot @Async 异步任务执行
  16. batch 常用命令
  17. Python 常用Web框架的比较
  18. 使用mybatis-generator插件自动生成代码的步骤
  19. Tomcat Connector原理
  20. django通过url传递参数(编辑操作页面)

热门文章

  1. 在腾讯云上把Laravel整合万向优图图片管理能力,打造高效图片处理服务
  2. 任务调度之集群(基于Quartz.net)
  3. Adobe 系列软件通用破解方式(animate cc,Photoshop cc,Flash cc)等
  4. 简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析
  5. Zookeeper的安装和初步使用
  6. git初学笔记1
  7. Swift: 使用cocoapods进行单元测试找不到bridge_header文件
  8. sublime前端开发工具常用技巧
  9. Java中的socket通信
  10. Xamarin.Forms+Prism(1)—— 开发准备