求欧拉路径...直接dfs即可,时间复杂度O(N)

---------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
 
using namespace std;
 
#define X(i) Edge[i].first
#define Y(i) Edge[i].second
typedef pair<int, int> pii;
 
const int maxn = 10;
const int maxm = 109;
const int n = 7;
 
struct edge {
int to, F, Id;
edge* next;
} E[maxm << 1], *pt = E, *head[maxn];
 
void AddEdge(int u, int v, int Id, int f) {
pt->to = v;
pt->F = f;
pt->Id = Id;
pt->next = head[u];
head[u] = pt++;
}
 
inline edge* Rev(edge* e) {
return E + ((e - E) ^ 1);
}
 
pii Edge[maxm];
int N, cnt[maxn], par[maxn];
stack<pii> S;
 
int Find(int x) {
return x == par[x] ? x : par[x] = Find(par[x]);
}
 
bool chk() {
int c = 0;
for(int i = 0; i < n; i++)
if((cnt[i] & 1) && ++c > 2) return false;
for(int i = 0; i < n; i++) par[i] = i;
for(int i = 0; i < N; i++)
par[Find(X(i))] = Find(Y(i));
c = -1;
for(int i = 0; i < n; i++) if(cnt[i]) {
if(!~c) 
c = par[i];
else if(par[i] != c)
return false;
}
return true;
}
 
void Euler(int x) {
for(edge*&e = head[x]; e; ) if(e->F) {
int F = e->F, t = e->to, Id = e->Id;
e->F = Rev(e)->F = 0;
e = e->next;
Euler(t);
S.push(make_pair(Id, F));
} else
e = e->next;
}
 
int main() {
scanf("%d", &N);
memset(cnt, 0, sizeof cnt);
for(int i = 0; i < N; i++) {
scanf("%d%d", &X(i), &Y(i));
cnt[X(i)]++;
cnt[Y(i)]++;
AddEdge(X(i), Y(i), i, 1);
AddEdge(Y(i), X(i), i, -1);
}
if(!chk()) {
puts("No solution");
return 0;
}
for(int i = 0; i < n; i++) if(cnt[i] & 1) {
Euler(i);
while(!S.empty()) {
pii p = S.top(); S.pop();
printf("%d %c\n", ++p.first, p.second != 1 ? '-' : '+');
}
return 0;
}
for(int i = 0; i < n; i++) if(cnt[i]) {
Euler(i);
while(!S.empty()) {
pii p = S.top(); S.pop();
printf("%d %c\n", ++p.first, p.second != 1 ? '-' : '+');
}
return 0;
}
return 0;
}

---------------------------------------------------------------------------

101. Domino

time limit per test: 0.25 sec. 
memory limit per test: 4096 KB

Dominoes – game played with small, rectangular blocks of wood or other material, each identified by a number of dots, or pips, on its face. The blocks usually are called bones, dominoes, or pieces and sometimes men, stones, or even cards.
The face of each piece is divided, by a line or ridge, into two squares, each of which is marked as would be a pair of dice...

The principle in nearly all modern dominoes games is to match one end of a piece to another that is identically or reciprocally numbered.

ENCYCLOPÆDIA BRITANNICA

Given a set of domino pieces where each side is marked with two digits from 0 to 6. Your task is to arrange pieces in a line such way, that they touch through equal marked sides. It is possible to rotate pieces changing left and right side.

Input

The first line of the input contains a single integer N (1 ≤ N ≤ 100) representing the total number of pieces in the domino set. The following N lines describe pieces. Each piece is represented on a separate line in a form of two digits from 0 to 6 separated by a space.

Output

Write “No solution” if it is impossible to arrange them described way. If it is possible, write any of way. Pieces must be written in left-to-right order. Every of N lines must contains number of current domino piece and sign “+” or “-“ (first means that you not rotate that piece, and second if you rotate it).

Sample Input

5 1 2 2 4 2 4 6 4 2 1 

Sample Output

2 - 5 + 1 + 3 + 4 - 

SGU 101.Domino( 欧拉路径 )的更多相关文章

  1. SGU 101 Domino (输出欧拉路径)

    101. Domino time limit per test: 0.25 sec. memory limit per test: 4096 KB Dominoes – game played wit ...

  2. sgu 101 Domino 解题报告及测试数据

    101. Domino time limit per test: 0.25 sec. memory limit per test: 4096 KB 题解: 求多米诺骨牌按照一定方式放置能否使相邻的位置 ...

  3. SGU 101 Domino【欧拉路径】

    题目链接: http://acm.sgu.ru/problem.php?contest=0&problem=101 题意: N个多米诺骨牌,每个骨牌左右两侧分别有一个0~6的整数(骨牌可以旋转 ...

  4. Domino - SGU 101 (欧拉路径)

    题目大意:这是一个多米诺骨游戏,这个游戏的规则就是一个连着一个,现在给出 N 个多米诺,每个多米诺两边都有一个编号,相邻的多米诺的编号要一致,当然多米诺是可以翻转的(翻转就加‘-’,不翻转是‘+’), ...

  5. SGU 101.Domino (欧拉路)

    时间限制: 0.5 sec 空间限制: 4096 KB 描述 多米诺骨牌,一种用小的方的木块或其他材料,每个都被一些点在面上标记,这些木块通常被称为骨牌.每个骨牌的面都被一条线分成两个   方形,两边 ...

  6. SGU 101 Domino 题解

    鉴于SGU题目难度较大,AC后便给出算法并发布博文,代码则写得较满意后再补上.——icedream61 题目简述:暂略 AC人数:3609(2015年7月20日) 算法: 这题就是一笔画,最多只有7个 ...

  7. sgu 101 domino

    题意还算简洁明了,加上有道翻译凑过着读完了题.题意大体上是 给你 n 个多米诺骨牌, 给出每个骨牌两端的数字, 只有数字相同才可以推到, 比如 2-3和3-2.你可以旋转这些多米诺骨牌, 输出一个可以 ...

  8. ACM: SGU 101 Domino- 欧拉回路-并查集

    sgu 101 - Domino Time Limit:250MS     Memory Limit:4096KB     64bit IO Format:%I64d & %I64u Desc ...

  9. SGU 101

    SGU 101,郁闷,想出来算法,但是不知道是哪个地方的问题,wa在第四个test上. #include <iostream> #include <vector> #inclu ...

随机推荐

  1. 【玩转Ubuntu】01. Ubuntu上配置JDK

    一.安装JDK 提示:这里我们使用jdk1.6,因为android开发要求使用1.6.如果不信你可以打开android studio,它会提示你选择JDK6的路径 下载地址: http://www.o ...

  2. POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23445   Accepted: 9605 Des ...

  3. asp.net中自定义验证控件

    在windows2003中,可能iis版本太底,不支持TextBox的类型设为Number类型,所以会报错,所以去掉后直接用验证控件来控制必须输入数字好了. <asp:RegularExpres ...

  4. CSS或者JS实现鼠标悬停显示另一元素

    想达到鼠标悬停到元素a上,显示另一个元素b,可以通过css实现也可以通过js实现.js:写两个函数:mouseenter,mouseleave,例如:其中 $("#a").mous ...

  5. html系列教程--标题,水平线,注释以及段落

    HTML标题 标题,用来显示文章重要性的文字,包含了文章的主旨,类似于作文题目. 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的,由大到小一次排列,h1 ...

  6. OCP prepare 20140628

    1. null if       nvl     nvl2 NULLIF函数 Oracle NULLIF函数语法为NULLIF(表达式1,表达式2),如果表达式1和表达式2相等则返回空值,如果表达式1 ...

  7. EC读书笔记系列之12:条款22、23、24

    条款22 将成员变量声明为private 记住: ★切记将成员变量声明为private.这可赋予客户访问数据的一致性.可细微划分访问控制.允诺约束条件获得保证,并提供class作者以充分的实现弹性. ...

  8. hadoop笔记之Hive的数据存储(视图)

    Hive的数据存储(视图) Hive的数据存储(视图) 视图(view) 视图是一种虚表,是一个逻辑概念:可以跨越多张表 既然视图是一种虚表,那么也就是说用操作表的方式也可以操作视图 但是视图是建立在 ...

  9. jQuery插件autoComplete使用详解

    安装/需要引入的文件 <script type="text/javascript" src="../js/jquery-1.8.3.min.js.js"& ...

  10. inline-block代替浮动布局float:left列表布局最佳方案

    基于各位前辈的辛勤劳动,下面得出使用inline-block替换float:left;的最佳方案. html代码 <div class="list"> <ul&g ...