PAT A 1034. Head of a Gang (30)

#include <cstdio>
#include <cstdlib>
#include <math.h>
#include <algorithm>
#include <map>
#include <iostream>
#include <string>
using namespace std;

int num=0,N,th,G[2010][2010]={0},weight[2010]={0},v;
bool vis[1010]={false};
map<string,int> stringtoint;
map<int,string> inttostring;
map<string,int> gang;

void DFS(int nowvis,int& head,int &numM,int&totalv)
{
    numM++;
    vis[nowvis]=true;
    if(weight[nowvis]>weight[head])
    {
        head=nowvis;
    }
    for(int i=0;i<num;i++)
    {
        if(G[nowvis][i]>0)
        {
            totalv+=G[nowvis][i];
            G[nowvis][i]=G[i][nowvis]=0;
            if(vis[i]==false)
            {
                DFS(i,head,numM,totalv);
            }
        }
    }
}

void DFST()
{
    for(int i=0;i<num;i++)
    {
        if(vis[i]==false)
        {
            int head=i,numM=0,tV=0;
            DFS(i,head,numM,tV);
            if(numM>2&&tV>th)
            {
                gang[inttostring[head]]=numM;
            }
        }
    }
}

int main()
{
    scanf("%d%d",&N,&th);
    for(int i=0;i<N;i++)
    {
        string s1,s2;
        int id1,id2,v;
        cin>>s1>>s2>>v;
        if(stringtoint.find(s1)==stringtoint.end())
        {
            id1=num;
            stringtoint[s1]=num++;
        }
        else
        {
            id1=stringtoint[s1];
        }
        if(stringtoint.find(s2)==stringtoint.end())
        {
            id2=num;
            stringtoint[s2]=num++;
        }
        else
        {
            id2=stringtoint[s2];
        }
        inttostring[id1]=s1;
        inttostring[id2]=s2;
        G[id1][id2]+=v;
        G[id2][id1]+=v;
        weight[id1]+=v;
        weight[id2]+=v;
    }
    DFST();
    cout<<gang.size()<<endl;
    map<string,int>::iterator it=gang.begin();
    for(it==gang.begin();it!=gang.end();it++)
    {
        cout<<it->first<<" "<<it->second<<endl;
    }
    system("pause");
    return 0;
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325517376&siteId=291194637