Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:测试数据有漏洞···

Posted by scut_lf at 2011-03-10 16:27:53 on Problem 2513
In Reply To:测试数据有漏洞··· Posted by:scut_lf at 2011-03-10 16:27:35
> #include <cstdio>
> #include <memory.h>
> 
> const int maxn = 500010;
> 
> struct node
> {
> 	int n;
> 	node *next[26];
> 
> 	node()
> 	{
> 		n = -1;
> 		memset( next, 0, sizeof(next) );
> 	}
> };
> 
> node *head = new node;
> int num = 0;
> int sum[maxn], fa[maxn];
> 
> int creat_dic( char *s )
> {
> 	node *p = head;
> 	int i, k;
> 
> 	for ( i = 0; s[i] - '\0'; ++i )
> 	{
> 		k = s[i] - 'a';
> 		if ( p->next[k] == 0 )
> 			p->next[k] = new node;
> 
> 		p = p->next[k];
> 	}
> 
> 	if ( p->n == -1 )
> 		p->n = num++;
> 
> 	return p->n;
> }
> 
> bool pd1()
> {
> 	for ( int i = 0; i < num; ++i )
> 		if ( fa[i] - fa[0] )
> 			return 0;
> 	
> 	return 1;
> }
> 
> bool pd2()
> {
> 	int k = 0;
> 	for ( int i = 0; i < num; ++i )
> 		if ( sum[i] % 2 )
> 			k++;
> 
> 	if ( k > 2 )
> 		return 0;
> 	else
> 		return 1;
> }
> 
> int main()
> {
> 	int i, u, v;
> 	char s1[15], s2[15];
> 
> 	memset( sum, 0, sizeof(sum) );
> 	for ( i = 0; i < maxn; ++i )
> 		fa[i] = i;
> 
> 	while ( scanf("%s %s", &s1, &s2) != EOF )
> 	{
> 		u = creat_dic(s1);
> 		v = creat_dic(s2);
> 
> 		sum[u]++;  sum[v]++;
> 
>                 //一时脑热,这样写了,没用并查集,居然过了
> 		if ( fa[u] < fa[v] )
> 		    fa[v] = fa[u];
> 		else
> 			fa[u] = fa[v]; 
> 	}
> 
> 	if ( pd1() && pd2() )
> 		printf("Possible\n");
> 	else
> 		printf("Impossible\n");
> 
> 	return 0;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator