PAT T1014 Circles of Friends

Posted zhanglichen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT T1014 Circles of Friends相关的知识,希望对你有一定的参考价值。

大水题,dfs判连通块的数量,bfs每个点找朋友圈的最大直径~

#include<bits/stdc++.h>
using namespace std;
const int maxn=1014;
vector<int> g[maxn];
bool visit[maxn];
int N;
int maxdepth=0;
void dfs (int s) {
    visit[s]=true;
    for (int i=0;i<g[s].size();i++) 
    if (visit[g[s][i]]==false) dfs(g[s][i]);
}
int dfsTrave () {
    int block=0;
    for (int i=1;i<=N;i++) 
    if (visit[i]==false) dfs(i),block++;
    return block;
}
void bfs (int s) {
    int depth[maxn]={0};
    queue<int> q;
    fill (visit,visit+maxn,false);
    q.push(s);
    visit[s]=true;
    while (!q.empty()) {
        int now=q.front();
        q.pop();
        for (int i=0;i<g[now].size();i++) 
        if (visit[g[now][i]]==false) {
            q.push(g[now][i]);
            depth[g[now][i]]=depth[now]+1;
            visit[g[now][i]]=true;
            maxdepth=max(maxdepth,depth[g[now][i]]);
        }
    }
}
int main () {
    scanf ("%d",&N);
    int k,x;
    for (int i=1;i<=N;i++) {
        scanf ("%d",&k);
        for (int j=1;j<=k;j++) {
            scanf ("%d",&x);
            g[i].push_back(x);
            g[x].push_back(i);
        }
    }
    int block=dfsTrave();
    for (int i=1;i<=N;i++) bfs (i);
    printf ("%d %d",block,max(0,maxdepth-1));
    return 0; 
}

 

以上是关于PAT T1014 Circles of Friends的主要内容,如果未能解决你的问题,请参考以下文章

SPOJ CIRU The area of the union of circles

TOJ 1449Area of Circles II

HackerRank Week of Code 31Colliding Circles

SPOJ CIRU The area of the union of circles (计算几何)

SPOJ CIRU The area of the union of circles ——Simpson积分

LightOj1366 - Pair of Touching Circles(求矩形内圆的对数)