4780036_ac_1313ms_69516k.cpp

来自「部分PKU上的源码」· C++ 代码 · 共 76 行

CPP
76
字号
#include<stdlib.h>
#include<iostream>
using namespace std;
struct node
{
	node *child[26];
	int num;
	node * father;
};
node *root;
int result;
int father_num;
char x1[12],x2[12];
void trie()
{
	root=new node();
	int i;
	root->num=0;
	root->father=NULL;
	for(i=0;i<26;i++)
	{
		root->child[i]=NULL;
	}
}
node * ts(char x[])
{
	int i=0;
	node *r=root;
	while(x[i])
	{
		if(r->child[x[i]-'a']==NULL)
		{
			node *p=new node();
			int j;
			for(j=0;j<26;j++)
			{
				p->child[j]=NULL;
			}
			p->num=0;
			p->father=NULL;
			r->child[x[i]-'a']=p;
		}
		r=r->child[x[i]-'a'];
		i++;
	}
	r->num++;
	if(r->num==1) father_num++;
	if(r->num%2==1) result++;
	else result--;
	return r;
}
node *find_f(node * x)
{
	node *p=x;
	while(p->father) p=p->father;
	while(x->father) {node *q=x;x=x->father;q->father=p;}//压缩路径
	return p;
}
int main()
{
	trie();
	result=0;
	father_num=0;
	while(scanf("%s%s",x1,x2)!=EOF)
	{
		node *r1=ts(x1);
		node *r2=ts(x2);
		node * f1=find_f(r1);
		node * f2=find_f(r2);
		if(f1!=f2) {f2->father=f1;father_num--;}
	}
	if(father_num>1) cout<<"Impossible"<<endl;
	else if(result==2||result==0) cout<<"Possible"<<endl;
	else cout<<"Impossible"<<endl;
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?