HDU3786 找出直系亲属(并查集)
来源:互联网 发布:中国国家网络安全局 编辑:程序博客网 时间:2024/06/07 23:33
一开始想用暴力求解,想了半天没有思路..
其实用并查集好多了:
#include<stdio.h>#include<string.h>int find(int array[],int x,int y){ int k=0,mark=0; while(array[x] > 0) { k++; if(array[x]==y){mark=1;break;} x=array[x]; } if(mark) return k; else return 0;}int main(){ int child[27]; int i,k,j,flag,tmpflag; char strchild[10],relation[10]; while(1) { scanf("%d%d",&i,&k); if(!i&&!k)break; scanf("\n"); for(j=1;j<=26;j++) child[j]=0; while(i--) { gets(strchild); if(strchild[1] != '-') child[strchild[1]-'A'+1] =strchild[0]-'A'+1; if(strchild[2] != '-') child[strchild[2]-'A'+1] =strchild[0]-'A'+1; } while(k--) { gets(relation); flag = find(child,relation[0]-'A'+1,relation[1]-'A'+1); tmpflag = find(child,relation[1]-'A'+1,relation[0]-'A'+1); if(!flag&&!tmpflag)printf("-\n"); else if(flag&&!tmpflag) { while(flag>2) { printf("great-"); flag--; } if(flag==2)printf("grandparent\n"); else if(flag==1)printf("parent\n"); } else if(!flag&&tmpflag) { while(tmpflag>2) { printf("great-"); tmpflag--; } if(tmpflag==2)printf("grandchild\n"); else if(tmpflag==1)printf("child\n"); } } } return 0;}
- HDU3786 找出直系亲属(并查集)
- hdu3786 找出直系亲属 水题
- HDU3786-找出直系亲属
- hdu3786——找出直系亲属
- HDU3786-找出直系亲属(DFS)
- 九度1035:找出直系亲属<并查集>
- 找出直系亲属
- 找出直系亲属
- 找出直系亲属
- HDU_3786 找出直系亲属- softbar
- HDU-3786找出直系亲属
- 题目1035:找出直系亲属
- 题目1035:找出直系亲属
- OJ_1035 找出直系亲属
- 题目1035:找出直系亲属
- 题目1035:找出直系亲属
- 题目1035:找出直系亲属
- hdu-3786-找出直系亲属
- 【例程】MSP430时钟程序
- 使用指针实现的线性表——链表
- 【例程】MSP430测量频率程序
- msp430步进电机
- 【例程】MSP430 FFT算法
- HDU3786 找出直系亲属(并查集)
- 【例程】MSP430 LCD1602程序
- arcgis server javascriptAPI3.0本地部署步骤
- LINUX网络编程之套接字
- 自动生成简单的sql语句
- 【例程】MSP430 AD转换实例
- spring mvc 系列视频教程
- C#中string.Empty、""和null 之间的区别
- 我的Android应用程序汇总(20120923更新)