hdu 1878 오로라 회로 문제 풀이 보고서
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11931 Accepted Submission(s): 4400
Problem Description
오 라 회 로 는 펜 이 지면 을 떠 나 지 못 하 게 그림 의 각 변 을 한 번 만 그 릴 수 있 고 출발점 으로 돌아 갈 수 있 는 회 로 를 말한다.이제 오 라 회 로 가 있 는 지 그림 을 정 해 주 시 겠 습 니까?
Input
테스트 입력 은 약간의 테스트 용례 를 포함한다.각 테스트 용례 의 첫 번 째 줄 은 두 개의 정수 로 노드 수 N (1 < N < 1000) 과 변수 M 을 제시한다.그 다음 에 M 줄 은 M 개의 변 에 대응 하고 각 줄 은 한 쌍 의 정 수 를 제시 하 는데 각각 이 변 이 직접 연 결 된 두 노드 의 번호 (노드 는 1 에서 N 번호) 이다.N 이 0 일 때 입력 매듭
다발
Output
모든 테스트 용례 의 출력 은 한 줄 을 차지 하고, 오로라 회로 가 존재 하면 1 을 출력 하고, 그렇지 않 으 면 0 을 출력 한다.
Sample Input
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
Sample Output
1
0
분석: 집합 을 이용 하여 계산 할 수 있다.
코드:
#include<stdio.h>
#include<string.h>
#define MAXN 1050
int d[MAXN],f[MAXN];
int find(int x)
{
return f[x]==x?x:(f[x]=find(f[x]));
}
int main()
{
int n,m,x,y,i;
while (~scanf("%d",&n) && n)
{
scanf("%d",&m);
memset(d,0,sizeof(d));
for (i=1; i<=n; i++) f[i]=i;
while (m--)
{
scanf("%d%d",&x,&y);
d[x]++;
d[y]++;
x=find(x),y=find(y);
f[x]=y;
}
//
int sum = 0;
for (i=1; i<=n; i++)
{
if(d[i]%2) break;
if(find(i)==i)sum++;
if(sum>1) break;
}
if (i<=n) printf("0
");
else printf("1
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ACM - 계산 기하학 적 Pick - up sticks -- poj 2653Description Stan has n sticks of various length. The data for each case start with 1 <= n <= 100000, the number of stick...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.