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
HackerRank Week of Code 31Colliding Circles
SPOJ CIRU The area of the union of circles (计算几何)