One way that the police finds the head of a gang is to check people's phone calls. If there is a phone call between A and B, we say that A and B is related. The weight of a relation is defined to be the total time length of all the phone calls made between the two persons. A "Gang" is a cluster of more than 2 persons who are related to each other with total relation weight being greater than a given threshold K. In each gang, the one with maximum total weight is the head. Now given a list of phone calls, you are supposed to find the gangs and the heads.

Input Specification:

Each input file contains one test case. For each case, the first line contains two positive numbers N and K (both less than or equal to 1000), the number of phone calls and the weight threthold, respectively. Then N lines follow, each in the following format:

Name1 Name2 Time

where Name1 and Name2 are the names of people at the two ends of the call, and Time is the length of the call. A name is a string of three capital letters chosen from A-Z. A time length is a positive integer which is no more than 1000 minutes.

Output Specification:

For each test case, first print in a line the total number of gangs. Then for each gang, print in a line the name of the head and the total number of the members. It is guaranteed that the head is unique for each gang. The output must be sorted according to the alphabetical order of the names of the heads.

Sample Input 1:

8 59

AAA BBB 10

BBB AAA 20

AAA CCC 40

DDD EEE 5

EEE DDD 70

FFF GGG 30

GGG HHH 20

HHH FFF 10

Sample Output 1:

2

AAA 3

GGG 3

Sample Input 2:

8 70

AAA BBB 10

BBB AAA 20

AAA CCC 40

DDD EEE 5

EEE DDD 70

FFF GGG 30

GGG HHH 20

HHH FFF 10

Sample Output 2:

0

首先 要建一个 以string的 下标的 连接表,需要用map

map<string,vector<string>  > mm;

表内直接存放 string 地址就行了,权值另外保存

map<string,int> node;

再 DFS  求出极大连通图的个数,及各各极大连通图的节点数,权值之和,权值最大的节点地址

坑点:

1、“A "Gang" is a cluster of more than 2 persons ”  所以节点数要大于2

2、因为每次通话每个人都权值都加了,其实总通话时间=权值之和/2;

 #include <iostream>

 #include <string>

 #include <vector>

 #include <map>

 using namespace std;

 struct Gang

 {

    int num,sum;

 };

 string ss1[];

 string ss2[];

    map<string,vector<string>  > mm;

        map<string,int> visit;

        map<string,int> node;

          map<string,Gang> result;

 void DFS(string s,int &sum,string &max,int &num)

 {

    if(node[s]>node[max]) max=s;

     num++;

       sum=sum+node[s];

    visit[s]=;

    for(int i=;i<mm[s].size();i++)

       {

             if(visit[mm[s][i]]==)

                   DFS(mm[s][i],sum,max,num);

       }

 }

 int main()

 {

      int  n,k,t;

       string s1,s2;

       while(cin>>n)

       {

          cin>>k;

          mm.clear();

          visit.clear();

          node.clear();

          result.clear();

          int i;

          for(i=;i<n;i++)

          {

             cin>>s1>>s2>>t;

               ss1[i]=s1;

               ss2[i]=s2;

               visit[s1]=;

               visit[s2]=;

               node[s1]+=t;

               node[s2]+=t;

                mm[s1].push_back(s2);

                mm[s2].push_back(s1);

          }

          map<string,int>::iterator it;

          int num;

          int sum;

          int count=;

          string max;

          for(it=node.begin();it!=node.end();it++)

          {

                if(visit[it->first]==)

                {

                      sum=;

                      num=;

                      max=it->first;

                      DFS(it->first,sum,max,num);

                      if(sum/>k&&num>)

                      {

                  count++;

                        result[max].num=num;

                        result[max].sum=sum;

                      }

                }

          }

          cout<<count<<endl;

          map<string,Gang>::iterator it2;

          for(it2=result.begin();it2!=result.end();it2++)

          {

                cout<<it2->first<<" "<<(it2->second).num<<endl;

          }        

       }

   return ;

 }

Head of a Gang (map+邻接表+DFS)的更多相关文章

  1. 确定比赛名次(map+邻接表 邻接表 拓扑结构 队列+邻接表)

    确定比赛名次 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  2. 分道扬镳 /// 邻接表 DFS 剪枝 oj1332

    题目大意: 编号为1…N 的N个城市之间以单向路连接,每一条道路有两个参数:路的长度和通过这条路需付的费用. Bob和Alice生活在城市1,但是当Bob发现了Alice玩扑克时欺骗他之后,他决定与她 ...

  3. zzuli 1907: 小火山的宝藏收益 邻接表+DFS

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 113  Solved: 24 SubmitStatusWeb Board Description    ...

  4. HDU2586 How far away ? 邻接表+DFS

    题目大意:n个房子,m次询问.接下来给出n-1行数据,每行数据有u,v,w三个数,代表u到v的距离为w(双向),值得注意的是所修建的道路不会经过一座房子超过一次.m次询问,每次询问给出u,v求u,v之 ...

  5. 数据结构作业——图的存储及遍历(邻接矩阵、邻接表+DFS递归、非递归+BFS)

    邻接矩阵存图 /* * @Author: WZY * @School: HPU * @Date: 2018-11-02 18:35:27 * @Last Modified by: WZY * @Las ...

  6. NBOJv2——Problem 1037: Wormhole(map邻接表+优先队列SPFA)

    Problem 1037: Wormhole Time Limits:  5000 MS   Memory Limits:  200000 KB 64-bit interger IO format: ...

  7. 魔法宝石(邻接表+dfs更新)

    魔法宝石 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submissi ...

  8. PAT1013. Battle Over Cities(邻接矩阵、邻接表分别dfs)

    //采用不同的图存储结构结构邻接矩阵.邻接表分别dfs,我想我是寂寞了吧,应该试试并查集,看见可以用并查集的就用dfs,bfs代替......怕了并查集了 //邻接矩阵dfs #include< ...

  9. All Roads Lead to Rome(30)(MAP【int,string】,邻接表,DFS,模拟,SPFA)(PAT甲级)

    #include<bits/stdc++.h>using namespace std;map<string,int>city;map<int,string>rcit ...

随机推荐

  1. DataTables warning (table id = 'myTable'): Requested unknown parameter '0' from the data source for row 0

    第一种方式:不用在js里设置列Html: <table id="myTable"> <thead> <tr> <th>Title-1 ...

  2. hello world from hibernate

    初次学习hibernate,第一个程序,用的是XML配置文件 准备工作:下载hibernate的JAR包,我下的是当前最新的4.2.3,SQL的数据库驱动文件SQLJDBC,导入上述架包.

  3. cent0s7 显卡驱动导致重启黑屏

    由于 CentOS7.0 版本与前面的 CentOS6.5 及之前的版本的模式变更方法有很大 的不同,以前的版本中我们可以在vi /etc/inittab 文件中将id:5:initdefault 更 ...

  4. ps扩大、缩小选区

    用"套索工具""魔棒工具"或者等工具将选区选出来,创建出一个需要处理的选区.   点击ps菜单栏中的"选择",在下拉菜单中选择"修 ...

  5. Web前端学习笔记1

    Day1. 1.Windows常用快捷键. 快捷键 功能 ctrl+c 复制 ctrl+v 粘贴 ctrl+x 剪切(复制和剪切后都可以粘贴) ctrl+a 全选 ctrl+s 保存 ctrl+tab ...

  6. 在web界面调用水晶报表导出文件时莫名错误

    原因是水晶报表未破解版有字段限制,不能超过90(具体个数没仔细测)个字段. 建议那些select *的朋友检查一下字段个数

  7. Sql传参含有单引号

    程序 exec heduling_date_select ' Name like @%a%@ or phone like @%a%@ or Cus_code like @%a%@ or objjc l ...

  8. sql还原数据库时候,遇到数据库被占用的解决情况

    最近上班时候,经常要做数据库还原,时常遇到数据被占用的情况, 执行一句sql语句就可以解决, ALTER DATABASE dbname SET OFFLINE WITH ROLLBACK IMMED ...

  9. Access和Sql区别

    假设表game有一字段为gameYuiJian为bit字段(SQL SERVER 20005)和"是/否"字段(ACCSS数据库),在编写脚本文件时,如下才能正确执行 SQL st ...

  10. 在win下面使用cdt+cygwin+cmake

    在cygwin终端下面, cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug 当收获警告 Could ...