Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
测试数据有漏洞···#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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator