杭电1116为什么WA?

#include<stdio.h>
#include<string.h>

int head[27],tail[27];
int set[27],state[27];

int abs(int a)
{
return a>0?a:-a;
}

int find(int a)
{
int root = a;
int parent = set[a];
while(root != set[root])
root = set[root];
while(root != parent)
{
set[a] = root;
a = parent;
parent = set[a];
}
return root;
}

void Union(int a,int b)
{
int root_a = find(a),root_b = find(b);
set[root_a] = root_b;
}

int isok()
{
int i,c = 0;
int sum = 0;
for(i = 1;i <= 26;i ++)
{
if(state[i])
{
if(set[i] == i)
c ++;
sum += abs(head[i] - tail[i]);
}
if(c >= 2)
return 0;
}
if(sum == 0 || sum == 2)
return 1;
else
return 0;
}

int main(){
char s[1000];
int t,len,i,a,b;
long n;

scanf("%d",&t);
while(t --)
{
for(i = 1;i <= 26;i ++)
{
head[i] = tail[i] = 0;
set[i] = i;
state[i] = 0;
}
scanf("%ld",&n);
while(n --)
{
scanf("%s",s);
len = strlen(s);
a = s[0] - 96;
b = s[len - 1] - 96;
head[a] ++;
tail[b] ++;
state[a] = state[b] = 1;
Union(a,b);
}
if(isok())
printf("Ordering is possible.\n");
else
printf("The door cannot be opened.\n");
}
return 0;
}

char s[1001];
温馨提示:答案为网友推荐,仅供参考
相似回答