UVaOJ 10054 - The Necklace
——by A Code Rabbit
Description
양쪽 끝에 색깔이 있는 구슬 한 무더기를 입력하세요.출력을 밧줄로 묶을 수 있습니까?
Types
Date Structure::Graphs
Analysis
그림이 없는 오로라 회로를 구하려면 먼저 오로라 회로가 있는지 없는지를 판단한 후에 출력으로 돌아가면 된다.출력할 때 머리와 꼬리가 연결되어 있는 것을 주의하십시오. 조건에 부합되기만 하면 AC가 됩니다. (예를 들어 출력하지 않아도 됩니다.)
Solution
// UVaOJ 10054
// The Necklace
// by A Code Rabbit
#include <cstdio>
#include <cstring>
const int LIMITS_COLORS = 100;
const int LIMITS_BEADS = 2000;
int num_case;
struct Beads {
int u;
int v;
};
Beads beads[LIMITS_BEADS];
int graph[LIMITS_COLORS][LIMITS_COLORS];
int n;
int order[LIMITS_COLORS];
bool visit[LIMITS_COLORS];
int sum;
void Process(int u, int v);
bool MatchConditions();
void Search(int pos);
void Print(int x);
int main() {
scanf("%d", &num_case);
for (int t = 1; t <= num_case; ++t) {
// INIT.
memset(graph, 0, sizeof(graph));
memset(order, 0, sizeof(order));
memset(visit, false, sizeof(visit));
sum = 0;
// Inputs.
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
int u, v;
scanf("%d%d", &beads[i].u, &beads[i].v);
Process(beads[i].u, beads[i].v);
}
// Compete the number of colors.
int num_colors = 0;
for (int i = 0; i < LIMITS_COLORS; ++i) {
if (order[i]) {
++num_colors;
}
}
// Judge whether the orders of them match conditions.
bool exist_euler_circuit = MatchConditions();
// Judge whether the undircected graph is connected.
if (exist_euler_circuit) {
for (int i = 0; i < LIMITS_COLORS; ++i) {
if (order[i]) {
Search(i);
if (sum != num_colors) {
exist_euler_circuit = false;
}
break;
}
}
}
// Outputs.
if (t > 1) {
printf("
");
}
printf("Case #%d
", t);
if (exist_euler_circuit) {
Print(beads[0].u);
} else {
printf("some beads may be lost
");
}
}
return 0;
}
void Process(int u, int v) {
++graph[u][v];
++graph[v][u];
++order[u];
++order[v];
}
bool MatchConditions() {
for (int i = 0; i < LIMITS_COLORS; ++i) {
if (order[i] % 2) {
return false;
}
}
return true;
}
void Search(int pos) {
visit[pos] = true;
++sum;
for (int i = 0; i < LIMITS_COLORS; ++i) {
if (graph[pos][i] && !visit[i]) {
Search(i);
}
}
}
void Print(int x) {
for (int i = 0; i < LIMITS_COLORS; ++i) {
if (graph[x][i]) {
--graph[x][i];
--graph[i][x];
Print(i);
printf("%d %d
", i, x);
}
}
}
PDF 다운로드
참고 자료: 없음
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.