Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX 100000
- typedef struct member {
- char name[42];
- struct member *l;
- struct member *r;
- }Member;
- typedef struct tree {
- char name[42];
- Member *member;
- struct tree *l;
- struct tree *r;
- }Tree;
- Member *buildMember(Member *root, char *person) {
- if(root == NULL) {
- Member *current = (Member *)malloc(sizeof(Member));
- strcpy(current->name,person);
- current->l = NULL;
- current->r = NULL;
- return current;
- }
- if(strcmp(person, root->name) < 0) root->l = buildMember(root->l, person);
- else if(strcmp(person, root->name) > 0) root->r = buildMember(root->r, person);
- return root;
- }
- Tree *buildTree(Tree *root, char *cname, char *person) {
- // printf("club %s\n", cname);
- if(root == NULL) {
- Tree *current = (Tree *)malloc(sizeof(Tree));
- strcpy(current->name,cname);
- // printf("hey club %s leader %s\n",current->name, person);
- current->l = NULL;
- current->r = NULL;
- current->member = buildMember(current->member, person);
- return current;
- }
- if(strcmp(cname, root->name) < 0) root->l = buildTree(root->l, cname, person);
- else if(strcmp(cname, root->name) > 0) root->r = buildTree(root->r, cname, person);
- else { /* add a new member */
- root->member = buildMember(root->member, person);
- }
- return root;
- }
- // for queries
- Tree *search(Tree *root, char *cname) {
- if(root == NULL) return NULL;
- if(strcmp(root->name, cname) == 0) {
- // printf("club %s leader %s\n", root->name, root->member->name);
- return root;
- }
- if(strcmp(cname, root->name) < 0) return search(root->l, cname);
- else if(strcmp(cname, root->name) > 0) return search(root->r, cname);
- return root;
- }
- int findMember(Member *root, char *person) {
- // printf("leader %s\n", root->name);
- if(root == NULL) return 0;
- if(strcmp(root->name, person) == 0) return 1;
- else if(strcmp(person, root->name) < 0) return findMember(root->l, person);
- else if(strcmp(person, root->name) > 0) return findMember(root->r, person);
- return 0;
- }
- int main () {
- int k; scanf("%d", &k);
- int inst;
- char person[42], cname[42];
- Tree *root = NULL;
- for(int i = 0; i < k; i++) {
- scanf("%d%s%s", &inst, person, cname);
- root = buildTree(root, cname, person);
- }
- int q; scanf("%d", &q);
- for(int i = 0; i < q; i++) {
- scanf("%d", &inst);
- if(inst == 0) {
- scanf("%s", cname);
- Tree *newroot = search(root, cname);
- if(newroot == NULL) printf("None\n");
- else printf("%s\n", (newroot->member)->name);
- }
- else {
- scanf("%s%s", person, cname);
- Tree *newroot = search(root, cname);
- // printf("club %s\n", newroot->name);
- if(newroot == NULL) printf("-1\n");
- else if(findMember(newroot->member, person)) printf("1\n");
- else printf("0\n");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement