HDU 및 검색 집합 - 3172 가상 친구
이 문 제 는 입력 한 두 사람 으로 구 성 된 소 셜 네트워크 서비스 (SNS) 인원 을 찾기 위해 두 사람과 앞 사람 으로 구 성 된 집합 에 얼마나 많은 요소 가 있 는 지 를 집계 하 는 것 이다.우 리 는 보조 배열 sum 을 추가 합 니 다. 두 집합 이 합 쳐 질 때 우 리 는 부모 노드 가 아래 표 시 된 sum 값 에 하위 노드 의 sum 값 을 추가 하여 이 집합 에 얼마나 많은 요소 가 있 는 지 표현 합 니 다.
#include<stdio.h>
#include<iostream>
#include<string>
#include<map>
using namespace std;
#define MAX 100000
int total;
map<string,int>A;
int pa[MAX],sum[MAX];
int find_set(int x){
if(x==pa[x]) return x;
pa[x]=find_set(pa[x]);
return pa[x];
}
void union_set(int x,int y){
x = find_set(x);
y = find_set(y);
if(x!=y){
pa[x]=y;
sum[y]+=sum[x];
}
}
int main(){
int n,m;
string a,b;
while(scanf("%d",&n)!=EOF){
while(n--){
total=0;
A.clear();
scanf("%d",&m);
while(m--)
{
cin>>a>>b;
if(A.find(a)==A.end())
{
total++;
A[a]=total;
pa[total]=total;
sum[total]=1;
}
if(A.find(b)==A.end())
{
total++;
A[b]=total;
pa[total]=total;
sum[total]=1;
}
union_set(A[a],A[b]);
int ans=find_set(A[a]);
printf("%d
",sum[ans]);
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.