HOJ 1033
2011-08-12 11:08
274 查看
判断是否存在欧拉路径,而且图必需连通!
第二点忘记判断了WA了几次。
HOJ 1033
而且这个题目不能用IOSTREAM这个头文件
爆内存。。
第二点忘记判断了WA了几次。
HOJ 1033
#define MAXN 1005 #define _ufind_run(x) for(;p[t=x];x=p[x],p[t]=(p[x]?p[x]:x)) #define _run_both _ufind_run(i);_ufind_run(j) struct ufind{ int p[28],t; void init(){memset(p,0,sizeof(p));} void set_friend(int i,int j){_run_both;p[i]=(i==j?0:j);} int is_friend(int i,int j){_run_both;return i==j&&i;} }f; int n; int hru[27],hcu[27]; bool record[27]; char ss[MAXN]; void init() { f.init(); scanf("%d",&n); memset(record,false,sizeof(record)); memset(hru,0,sizeof(hru)); memset(hcu,0,sizeof(hcu)); for(int i = 0;i<n;i++) { scanf(" %s",ss); hcu[ss[0]-'a']++; hru[ss[strlen(ss)-1]-'a']++; f.set_friend(ss[0]-'a'+1,ss[strlen(ss)-1]-'a'+1); record[ss[0]-'a'] = true; record[ss[strlen(ss)-1]-'a'] = true; } int tmp = 0; while(!record[tmp]) tmp++; //下面判断图是否连通 for(int i = tmp+1;i<27;i++) { if(record[i]) { if(!f.is_friend(tmp+1,i+1)) { tmp = 99; break; } } } if(tmp == 99) { puts("The door cannot be opened."); return; } int beg =0,end=0; for(int i = 0;i<27;i++) { tmp = hru[i] - hcu[i]; if(tmp == 0) continue; else if(tmp == -1) end++; //出入度 else if(tmp == 1) beg++; else {end = beg = 1000;break;} } //出入度为1和-1各一个,或者是欧拉回路 if((end == 0 && beg == 0) || (end == 1 && beg == 1)) { puts("Ordering is possible."); } else { puts("The door cannot be opened."); } return; } int main() { FOPEN int cse;scanf("%d",&cse); while(cse --) { init(); } return 0; }
而且这个题目不能用IOSTREAM这个头文件
爆内存。。
相关文章推荐
- poj 1033 Defragment 解题报告
- HOJ 1032
- hoj 2473 Fish Can Fly解题报告
- ural 1033 Labyrinth
- [DFS/动态规划DP] HDU/HOJ 3779 Railroad 暴力解 Zipper加强版
- hdu/hoj 3875 Euclidean Algorithm
- hoj1740
- HOJ—Generalized Fibonacci
- hoj 1004 Prime Palindromes 回文素数
- HOJ 部分分类
- HOJ 1022 Spacecraft Malfunction
- HOJ---10641 Equidivisions [BFS]
- hoj 1867 经理的烦恼
- HOJ 2576 Simple Calculation 容斥原理(DFS)
- HOJ 1081 Scramble Sort
- Square DFS poj&hoj
- hoj 2430 Counting the algorithms
- HOJ 3057 Cai's DOTA game
- HOJ 2588 Mispelling
- HOJ 2089 4th point