zoukankan      html  css  js  c++  java
  • hdu 4039 The Social Network

    /*
    http://acm.hdu.edu.cn/showproblem.php?pid=4039
    题意:给出N对好友关系,之后Q次提问,问可以对该用户推荐的相识度最高的好友;
    推荐好友满足的条件:该用户的所有好友的好友中,出现次数最多的,
    而且推荐好友本身不是该用户的好友;若有多个推荐好友时,按字典序输出;
    一道悲剧的题啊*/
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define N 2500
    #include<iostream>
    #include<algorithm>
    using namespace std;
    char str[N][20],out[N][20];
    int map[N][N],k,max1,num[N];
    int find(char c[])
    {
        int i;
        for(i=0;i<k;i++)
        {
            if(strcmp(c,str[i])==0)
            {
                return i;
            }
        }
        strcpy(str[i],c);
        k++;
        return i;
    }
    int search(int x)
    {
        max1=-1;
    
        int i,j;
        for(i=0;i<k;i++)//以前做时  暴力枚举有共同的好友最多的人 ,不知为嘛tle 悲剧
        {
    
            if(map[x][i]==1)
            for(j=0;j<k;j++)
            {
                if(map[x][j]==0&&map[i][j]==1&&x!=j)
                {
                    num[j]++;
                    if(max1<num[j])max1=num[j];
                }
            }
    
        }
        return max1;
    }
    int cmp(const void *a, const void *b)
    {
        return strcmp( (char *)a, (char *)b );
    }
    
    int main()
    {
        int T,l,n,q,i;
        char a[20],b[20];
        scanf("%d",&T);
        for(l=1;l<=T;l++)
        {
            k=0;
            scanf("%d%d",&n,&q);
            getchar();
            memset(map,0,sizeof(map));
            for(i=0;i<n;i++)
            {
                scanf("%s%s",a,b);
                int x=find(a);
                int y=find(b);
                map[x][y]=map[y][x]=1;
    
            }
            printf("Case %d:\n",l);
            while(q--)
            {
                scanf("%s",a);
                memset(num,0,sizeof(num));
                int x=find(a);
                max1=search(x);
                //printf("%d\n",max1);
                if(max1==-1)
                {
                    printf("-\n");
                    continue;
                }
                int len=0;
                for(i=0;i<k;i++)
                {
                    if(max1==num[i])
                    {
                        strcpy(out[len++],str[i]);
                    }
                }
                qsort(out,len,sizeof(out[0]),cmp);
                for(i=0;i<len;i++)
                {
                   printf("%s",out[i]);
                   if(i!=len-1)printf(" ");
                }
                printf("\n");
    
            }
        }
    }
    

      

  • 相关阅读:
    Buffer -nodejs
    Tip提示框另类写法
    SASS入门
    界面设计必须要权衡的三个要素
    如何快速出稿一个优秀APP的构图
    如何画好一套线性图标
    Ui培训之如何设计极简三色图标
    移动APP设计国外资源总汇
    移动界面UI颜色设计
    APP专业视觉设计基础标准要求
  • 原文地址:https://www.cnblogs.com/acSzz/p/2435278.html
Copyright © 2011-2022 走看看