[题解]UVA10054 The Necklace

链接:http://vjudge.net/problem/viewProblem.action?id=18806

描述:给出一堆珠子,每个珠子有两种颜色,有一端颜色相同的珠子可以串在一起,问是否可以把所有珠子串在一起,并求其中一种方案。

思路:欧拉回路

以颜色作为节点,以珠子作为边建图,无向图。

下面是我的实现:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 #define MaxC 55
 6 int Edge[MaxC][MaxC],Du[MaxC];
 7 int M,Cnt;
 8 bool vis[MaxC][MaxC];
 9 inline void Addedge(int u,int v)
10 {
11     Edge[u][v]++;Edge[v][u]++;
12 }
13 void Solve(int u)
14 {
15     int v;
16     for(v=1;v<=M;)
17     {
18         if(Edge[u][v])
19         {
20            // vis[u][v]=vis[v][u]=1;
21             Edge[u][v]--;Edge[v][u]--;
22             Solve(v);
23             printf("%d %d",v,u);
24             if(u!=M)
25                 printf("\n");
26             if(u==M)
27             {
28                 Cnt--;
29                 if(Cnt)
30                     printf("\n");
31             }
32         }
33         else v++;
34     }
35 }
36 int main()
37 {
38     int T,N;
39     int i,j,u,v;
40     scanf("%d",&T);
41     for(i=1;i<=T;i++)
42     {
43         if(i>1) printf("\n");
44         printf("Case #%d\n",i);
45         scanf("%d",&N);
46         memset(Du,0,sizeof(Du));
47         memset(Edge,0,sizeof(Edge));
48         memset(vis,0,sizeof(vis));
49         M=0;
50         for(j=1;j<=N;j++)
51         {
52             scanf("%d%d",&u,&v);
53             Addedge(u,v);
54             Du[u]++;Du[v]++;
55             if(M<u) M=u;
56             if(M<v) M=v;
57         }
58         for(j=1;j<=M;j++)
59             if(Du[j]%2)
60                 break;
61         if(j<=M)
62         {
63             printf("some beads may be lost\n");
64             continue;
65         }
66         Cnt=Du[M];
67         Solve(M);
68     }
69     return 0;
70 }

给一个我写的数据生成器:http://www.cnblogs.com/CQBZOIer-zyy/p/3818078.html

[题解]UVA10054 The Necklace,布布扣,bubuko.com

时间: 2024-10-06 08:02:15

[题解]UVA10054 The Necklace的相关文章

[数据生成器]UVA10054 The Necklace

应吴老师之邀,写了个数据生成器. 目前这个数据生成器可以保证生成的数据都是合法的,且效率也还不错.只是在建立普通连通图的时候zyy偷懒了,直接把所有点串起来从而保证图的连通.如果有大神有更好的方法请不吝指教,zyy不胜感谢~~ 下面是代码: 1 #include<cstdio> 2 #include<ctime> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cmath> 6 #includ

Uva10054 The Necklace

Uva10054 欧拉回路 题意:给n个珠子,每个珠子的两端的颜色不同.问能否组成一条项链,两颗相邻的珠子相邻的两端颜色相同. 思路:把颜色看做点.珠子看做边.每一个珠子在两种颜色之间连边.无向图中任意一点的度数都为偶数,则该图具有欧拉回路.然后通过euler函数来输出即可. /* ID: onlyazh1 LANG: C++ TASK: The Necklace */ #include<iostream> #include<cmath> #include<stack>

UVA-10054 The Necklace (欧拉回路)

题目大意:有n个珠子,珠子两边的颜色已知,问能否连成一条项链.(两个珠子可以项链当且仅当一个珠子的一边颜色与另一个珠子的另一边颜色相同). 题目分析:欧拉回路.将颜色视作节点,珠子当做边,问题变成了找一条欧拉回路. 欧拉回路存在的条件:无向图:1.图连通:2.无奇点: 有向图:1.忽略边的方向后,图连通:2.每个点的入度都等于出度: 注意:输出回路的时候要逆序输出... 代码如下: # include<iostream> # include<cstdio> # include<

UVa10054 The Necklace,无向图求欧拉回路

无向图求欧拉回路: 1.图连通 2.所有顶点的度数位偶数 随便从一个点开始递归遍历即可求出路径 #include <cstdio> #include <cstring> #include <vector> using namespace std; const int maxcolor = 50; int n, G[maxcolor+1][maxcolor+1], deg[maxcolor+1]; struct Edge{ int from, to; Edge(int f

UVA-10054.The Necklace(欧拉回路)解题报告

2019-02-09-21:55:23 原题链接 题目描述: 给定一串珠子的颜色对,每颗珠子的两端分别有颜色(用1 - 50 之间的数字表示,对每颗珠子的颜色无特殊要求),若两颗珠子的连接处为同种颜色则可以相连, 当整串珠子都满足两两可以相连时则输出连接序列,否则输出some beads may be lost. 解题思路: 简单欧拉回路思维,注意判断该图是否可以构成欧拉回路. 算法描述及其实现: 1 #include <bits/stdc++.h> 2 using namespace std

题解 P1203 【[USACO1.1]坏掉的项链Broken Necklace】

[USACO1.1]坏掉的项链Broken Necklace 22892 破碎的项链 方法一:很容易想到枚举断点,再分别两头找,但是要注意很多细节 #include<iostream> #include<string> #include<cstdio> using namespace std; string s; int n,l,r,ll,rr,tmp,ans; inline int calc(int x) { ll=s[x],rr=s[x+1],l=x-1,r=x+2

USACO Broken Necklace 题解(环展开成链,枚举)

题目大意:有一个项链,由红.蓝.白三种颜色的珠子组成,然后现在选择项链中的某一处断开,然后沿断开处的两个珠子分别查找,直至找到一个颜色不同的珠子,并统计个数(其中颜色以第一个非白色的为准,白色的珠子可以视为红色,也可以视为蓝色),要求找到的珠子个数的最大值. 分析:首先读取项链字符串,考虑到这是一个环,可以在字符串尾部再添加一个同样的项链,这样当向后寻找的时候如果需要超过头结点时候可以直接通过查找第二个项链即可,之所以向后寻找时候不必担心会多查找,是因为只要项链中存在一个颜色不同的珠子必然会停止

hdu 3091 Necklace(状态压缩类似于TSP问题)

Necklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others)Total Submission(s): 709    Accepted Submission(s): 245 Problem Description One day , Partychen gets several beads , he wants to make these beads a necklace

USACO 1.1 Broken Necklace

Broken Necklace You have a necklace of N red, white, or blue beads (3<=N<=350) some of which are red, others blue, and others white, arranged at random. Here are two examples for n=29: 1 2 1 2 r b b r b r r b r b b b r r b r r r w r b r w w b b r r