5-25 모멘트
2166 단어 함께 조사하여 모으다PTA
//
#include<stdio.h>
#include<string.h>
#define MAX 30010
int a[MAX];
int rank[MAX];
int N,M;
int max;
void init();
int find(int x);
void union_set(int x,int y);
int main()
{
scanf("%d%d",&N,&M);
init();
max = -1;
for(int i=0;i<M;i++){
int n;
scanf("%d",&n);
int temp1,temp2;
if(n>=1){
scanf("%d",&temp1);
}
for(int j=1;j<n;j++){
scanf("%d",&temp2);
union_set(temp1,temp2);
}
}
printf("%d
",-max);
return 0;
}
void init(){
for(int i=0;i<=N;i++){
a[i] = -1;
rank[i] = 0;
}
}
//
int find(int x){
if(a[x]>=0){
a[x] = find(a[x]);
return a[x];
}
else{
return x;
}
}
//
/*int find(int x){
int temp=x;
while(a[temp]>=0){
temp = a[temp];
}
int m;
while(a[x]>=0){
m = a[x];
a[x] = temp;
x = m;
}
}
*/
void union_set(int x,int y){
int dx,dy;
dx = find(x);
dy = find(y);
if(dx==dy) return ;
else{
if(rank[dx]>rank[dy]){
a[dx] += a[dy];
if(a[dx]<max){
max = a[dx];
}
a[dy] = dx;
}
else{
a[dy] += a[dx];
if(a[dy]<max){
max = a[dy];
}
a[dx] = dy;
if(rank[dx]==rank[dy]){
rank[dx]++;
}
}
}
}
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#include<list>
#include<algorithm>
using namespace std;
int a[30030];
int ans;
int find(int x){
if(a[x]>=0){
a[x] = find(a[x]);
return a[x];
}
return x;
}
void union_(int x,int y){
int tx = find(x);
int ty = find(y);
if(tx==ty) return ;
a[tx] += a[ty];
a[ty] = tx;
if(a[tx]<ans) ans = a[tx];
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++){
a[i] = -1;
}
ans = -1;
for(int i=0;i<m;i++){
int t,temp,x;
scanf("%d",&t);
if(t>=1) scanf("%d",&temp);
for(int j=1;j<t;j++){
scanf("%d",&x);
union_(temp,x);
}
}
printf("%d
",-ans);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
POJ 2236 Wireless Network 간편한 검색 및 수집The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpected aftersho...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.