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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4039

    题目分类:字符串+bfs

    题意:给一个人际关系图,根据关系图,给一个人推荐一个人认识

    题目分析

    根据样例画出的关系图

    代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N=1010;
    
    map<string,int>mp;
    vector<int>G[N*2];
    vector<string> ans;
    
    char s1[20];
    char s2[20];
    char ss[20];
    
    char s[N*2][20];
    int Stack[N*2];
    int vis[N*2];
    
    bool bfs(int u)
    {
        memset(vis,0,sizeof(vis));
        vis[u]=-1;
        queue<int>q;
        for(int i=0;i<G[u].size();i++)
        {
            q.push(G[u][i]);
            vis[G[u][i]]=-1;
        }
        int siz=-2;
        int company=0;
        while(!q.empty())
        {
            u=q.front();
            q.pop();
            for(int i=0;i<G[u].size();i++)
            {
                int v=G[u][i];
                if(vis[v]==-1) continue;
                vis[v]++;
                if(siz<vis[v])
                {
                    siz=vis[v];
                    company=1;
                    Stack[0]=v;
                }
                else if(siz==vis[v])
                {
                    Stack[company++]=v;
                }
            }
        }
        if(siz<0) return false;
        ans.clear();
    
        for(int i=0;i<company;i++)
            ans.push_back(s[Stack[i]]);
        sort(ans.begin(),ans.end());
    
        for(int i=0;i<ans.size();i++)
        {
            cout<<ans[i];
            if(i<ans.size()-1)
                printf(" ");
        }
        printf("
    ");
        return true;
    }
    
    int main()
    {
        #ifndef ONLINE_JUDGE
            freopen("in.txt","r",stdin);
        #endif
    
        int t,n,m;
        scanf("%d",&t);
        for(int kase=1;kase<=t;kase++)
        {
            mp.clear();
            scanf("%d %d",&n,&m);
            for(int i=1;i<=2*n;i++)
                G[i].clear();
            int top=0;
            int num1,num2;
            while(n--)
            {
                scanf("%s %s",s1,s2);
                if(mp.find(s1)==mp.end())
                {
                    mp[s1]=++top;
                    memcpy(s[top],s1,sizeof s1);
                    num1=top;
                }
                else
                    num1=mp.find(s1)->second;
    
                if(mp.find(s2)==mp.end())
                {
                    mp[s2]=++top;
                    memcpy(s[top],s2,sizeof s2);
                    num2=top;
                }
                else
                    num2=mp.find(s2)->second;
    
                G[num1].push_back(num2);
                G[num2].push_back(num1);
            }
            printf("Case %d:
    ",kase);
            while(m--)
            {
                scanf("%s",ss);
                int i=mp.find(ss)->second;
                if(bfs(i)==false)
                    puts("-");
            }
        }
        return 0;
    }
    anytime you feel the pain.hey,refrain.don't carry the world upon your shoulders
  • 相关阅读:
    04: vue生命周期和实例属性和方法
    03: vuejs 事件、模板、过滤器
    (打补丁 )patch
    zabbix安装
    zabbix简介
    linux 虚拟网络模型介绍
    虚拟化
    虚拟化分类(半虚拟化和全虚拟化)
    playbook详解—YAML格式的文本
    ansible的介绍和一些基本模块介绍
  • 原文地址:https://www.cnblogs.com/gaoss/p/4960696.html
Copyright © 2011-2022 走看看