| ||||||||||
| 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 | |||||||||
ft,低级错误,原来欧拉回路和欧拉通路都可以满足条件In Reply To:谁能帮我看看,这道题就是判欧拉路径和连通吧,还有其他tricks?为什么老是wa Posted by:tianya at 2005-11-07 10:53:47 > #include<stdio.h>
> #include<memory.h>
> #include<stdlib.h>
> #include<string.h>
>
>
> #ifdef debug
> #define input file
> FILE*file=fopen("tmp.txt","r");
> #else
> #define input stdin
> #endif
>
> #define SIZE 100000
> #define WORD 1000
>
> int in[26]; //入度出度判欧拉路径
> int out[26];
> int visited[26];
> int uset[26]; //并查集判联通
> int T,N;
>
> int root(int i){
> if(uset[i]==i)return i;
> uset[i]=root(uset[i]);
> return uset[i];
> }
>
> void combine(int i,int j){
> uset[uset[j]]=uset[i];
> }
>
>
>
> int main(){
> fscanf(input,"%d",&T);
> while(T--){
> fscanf(input,"%d",&N);
> int i,j;
> char s[WORD+1];
> memset(in,0,sizeof(in));
> memset(out,0,sizeof(out));
> memset(visited,0,sizeof(visited));
> for(i=0;i<26;i++){
> uset[i]=i;
> }
> for(i=0;i<N;i++){
> fscanf(input,"%s",s);
> int first,last;
> first=s[0]-'a';
> last=s[strlen(s)-1]-'a';
>
> in[first]++;
> out[last]++;
> visited[first]=1;
> visited[last]=1;
> if(root(first)!=root(last))combine(first,last);
> }
> int num_in=0,num_out=0;
> for(i=0;i<26;i++){ //判欧拉路径
> if(!visited[i])continue;
> if(in[i]!=out[i]){
> if(in[i]==(out[i]-1))num_in++;
> else if(in[i]==(out[i]+1))num_out++;
> else break;
> }
> }
> if(i<26||(num_in!=1)||(num_out!=1)){
> printf("The door cannot be opened.\n");
> continue;
> }
> for(i=0;i<26;i++){ //判联通
> if(visited[i])break;
> }
> int _root=root(i);
> for(i++;i<26;i++){
> if(visited[i]&&root(i)!=_root)break;
> }
> if(i<26){
> printf("The door cannot be opened.\n");
> continue;
> }
> printf("Ordering is possible.\n");
> }
> system("pause");
> return 0;
> }
>
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator