zoukankan      html  css  js  c++  java
  • 【PAT甲级】1034 Head of a Gang (30 分)

    题意:

    输入两个正整数N和K(<=1000),接下来输入N行数据,每行包括两个人由三个大写字母组成的ID,以及两人通话的时间。输出团伙的个数(相互间通过电话的人数>=3),以及按照字典序输出团伙老大的ID和团伙的人数(团伙中通话时长最长的人视为老大,数据保证一个团伙仅有一名老大)。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 string s,s2;
     5 int x[1007],y[1007];
     6 vector<pair<int,int> >edge[20007];
     7 bool vis[20007];
     8 int val[20007];
     9 int mx=0;
    10 int pos=0;
    11 int ans[20007];
    12 int num[20007];
    13 int cnt=0;
    14 int c[1007];
    15 bool visedge[1007];
    16 int sum2=0;
    17 void dfs(int x){
    18     if(!vis[x])
    19         ++cnt;
    20     vis[x]=1;
    21     for(auto it:edge[x]){
    22         if(visedge[it.second])
    23             continue;
    24         visedge[it.second]=1;
    25         if(!vis[it.first]){
    26             ++cnt;
    27             vis[it.first]=1;
    28         }
    29         val[x]+=c[it.second];
    30         val[it.first]+=c[it.second];
    31         sum2+=c[it.second];
    32         if(val[x]>mx){
    33             mx=val[x];
    34             pos=x;
    35         }
    36         dfs(it.first);
    37     }
    38 }
    39 int main(){
    40     int n,k;
    41     cin>>n>>k;
    42     for(int i=1;i<=n;++i){
    43         cin>>s>>s2>>c[i];
    44         x[i]=(s[0]-'A')*26*26+(s[1]-'A')*26+s[2]-'A';
    45         y[i]=(s2[0]-'A')*26*26+(s2[1]-'A')*26+s2[2]-'A';
    46         edge[x[i]].push_back({y[i],i});
    47         edge[y[i]].push_back({x[i],i});
    48     }
    49     int sum=0;
    50     for(int i=1;i<=n;++i){
    51         sum2=0;
    52         mx=0;
    53         pos=0;
    54         cnt=0;
    55         if(!vis[x[i]])
    56             dfs(x[i]);
    57         if(cnt>2&&sum2>k){
    58             ans[pos]=sum2;
    59             num[pos]=cnt;
    60             ++sum;
    61         }
    62     }
    63     cout<<sum<<"
    ";
    64     for(int i=0;i<26*26*26;++i)
    65         if(ans[i]){
    66             char alp[3];
    67             int tmp=i;
    68             alp[0]=tmp/26/26;
    69             tmp%=26*26;
    70             alp[1]=tmp/26;
    71             tmp%=26;
    72             alp[2]=tmp;
    73             for(int j=0;j<=2;++j){
    74                 alp[j]+='A';
    75                 cout<<alp[j];
    76             }
    77             cout<<" "<<num[i]<<"
    ";
    78         }
    79     return 0;
    80 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    ....
    CodeForces 375A(同余)
    POJ 2377 Bad Cowtractors (最小生成树)
    POJ 1258 AgriNet (最小生成树)
    HDU 1016 Prime Ring Problem(全排列)
    HDU 4460 Friend Chains(bfs)
    POJ 2236 Wireless Network(并查集)
    POJ 2100 Graveyard Design(尺取)
    POJ 2110 Mountain Walking(二分/bfs)
    CodeForces 1059B Forgery(模拟)
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11521016.html
Copyright © 2011-2022 走看看