zoukankan      html  css  js  c++  java
  • 36th成都区域赛网络赛 hdoj4039 The Social Network(建图+字符串处理)


    这题是某年成都区域赛网络赛的一题。

            这题思路非常easy,可是从时间上考虑,不妨不要用矩阵存储,我用的链式前向星。

            採用线上查询。利用map对字符串编号,由于非常方便。要推荐的朋友,事实上就是朋友的朋友(这里指的是直接朋友,图中即指有直接边相连的)。

            所以在寻找时,仅仅须要查找朋友的朋友,并计数。

            注意:在输出时不能有对于的空格。         

          

     附代码:

       

    #include<iostream>
    using namespace std;
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<map>
    #include<algorithm>
    
    int n,m;
    char s11[20],s22[20];
    string g[20100],l[20100];
    int next[201000],head[2010],key[201000];
    int num;
    
    void add(int u,int v)
    {
         key[num]=v;
         next[num]=head[u];
         head[u]=num++;
    }
    
    
    int main()
    {
        int T,pp=0;
        scanf("%d",&T);
        while (T--)
        {
        map<string,int> hash;
        int n,m,i,j,k;      
        string s1,s2;
        int cnt=0;
        
        num=0;
    
        scanf("%d%d",&n,&m);
        memset(head,-1,sizeof(head));
        
        for (i=0;i<n;++i)
            {
            scanf("%s%s",s11,s22);
            s1=string(s11);
            s2=string(s22);
            if (hash[s1]==0)
               hash[s1]=++cnt,l[cnt]=s1;
            if (hash[s2]==0)
               hash[s2]=++cnt,l[cnt]=s2;
            
            add(hash[s1],hash[s2]);
            add(hash[s2],hash[s1]);
            }
        printf("Case %d:
    ",++pp);    
            
        for (i=0;i<m;++i)
            {
            scanf("%s",s11);
            s1=string(s11);
            int p=hash[s1];
            int f[20100],flag[20010];
            memset(f,0,sizeof(f));
            memset(flag,0,sizeof(flag));
            
            for (k=head[p];k!=-1;k=next[k]) flag[key[k]]=-1;
            
            for (k=head[p];k!=-1;k=next[k])  
                if (key[k]!=p)
                {
                   for (j=head[key[k]];j!=-1;j=next[j])
                       if (key[j]!=key[k] && key[j]!=p && flag[key[j]]==0)
                       {
                          f[key[j]]++;
                       }
                }
            int Max=-1;
            for (k=1;k<=cnt;++k) 
                {
                Max=max(Max,f[k]);
              //  printf("%d
    ",f[k]);
                }
            if (Max==0)
               {
               printf("-
    ");
               continue;
               }
            int q=0;
            for (k=1;k<=cnt;++k)
                if (Max==f[k])
                   {
                   g[q++]=l[k];
                   }
            sort(g,g+q);       
            for (k=0;k<q-1;++k)  cout << g[k] << " ";
            cout << g[q-1];
            cout << endl;
            }    
        
        }
    
        return 0;
    }
    

  • 相关阅读:
    stl变易算法(三)
    JAVA模拟登录实例
    python 使用scapy编写DNS Fuzzer
    SQL 用户定义表类型,在存储过程里使用数据类型作參数
    POJ2584_T-Shirt Gumbo(二分图多重最大匹配/最大流)
    HDU 2830 Matrix Swapping II
    【SSH之旅】一步步学习Hibernate框架(一):关于持久化
    java.text.ParseException: Unparseable date: &quot;2015-06-09 hh:56:19&quot;
    socket pro
    OpenWrt opkg 在线源默认配置
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4006217.html
Copyright © 2011-2022 走看看