洛谷 1341 无序字母对


欧拉路的裸题???

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 
 6 using namespace std;
 7 
 8 const int N = 3550;
 9 
10 int e[N][N], fir[4], a[N], m, tot, v[N], id[N], f[N], cnt = 0, ind[N], vec[N][N], l[N];
11 char s[3], sa[N];
12 
13 inline bool cmp(int a, int b)
14 {
15     return sa[a] < sa[b];
16 }
17 
18 void DFS(int u, int ste)
19 {
20     a[ste] = u;
21     if (ste == m)
22     {
23         for (int i = 0; i <= m; ++i) putchar(sa[a[i]]);
24         exit(0); 
25     }
26     for (int i = 1; i <= tot; ++i)
27         if (e[u][i]) vec[u][++l[u]] = i;
28     sort(vec[u] + 1, vec[u] + 1 + l[u], cmp);
29     for (int i = 1; i <= l[u]; ++i)
30     {
31         if (!e[u][vec[u][i]]) continue;
32         e[u][vec[u][i]] = e[vec[u][i]][u] = 0;
33         DFS(vec[u][i], ste + 1);
34         e[u][vec[u][i]] = e[vec[u][i]][u] = 1;
35     }
36 }
37 
38 int main()
39 {
40     scanf("%d", &m);
41     for (int i = 1; i <= m; ++i)
42     {
43         cin >> s[0] >> s[1];
44         if (!v[(int)s[0]]) v[(int)s[0]] = 1, id[(int)s[0]] = ++tot, sa[tot] = s[0];
45         if (!v[(int)s[1]]) v[(int)s[1]] = 1, id[(int)s[1]] = ++tot, sa[tot] = s[1];
46         e[id[(int)s[0]]][id[(int)s[1]]] = e[id[(int)s[1]]][id[(int)s[0]]] = 1;
47         ++ind[id[s[0]]], ++ind[id[s[1]]];
48     }
49     int ox = 0, ch = 0; fir[2] = 1;
50     for (int i = 1; i <= tot; ++i) 
51         if (ind[i] & 1) ++ox, fir[ch ^ 1] = i, ch ^= 1;
52         else fir[2] = (sa[i] < (char)sa[fir[2]]) ? i : fir[2];
53     if (ox == 1 || ox > 2)
54     {
55         puts("No Solution");
56         return 0;
57     }
58     if (ox)    { if (sa[fir[0]] > sa[fir[1]]) swap(fir[0], fir[1]); DFS(fir[0], 0); }
59     else { DFS(fir[2], 0); }
60     return 0;
61 }

优质内容筛选与推荐>>
1、iOS:App上架流程和支付宝支付流程
2、工具资源系列之 github 上各式各样的小徽章从何而来?
3、多线程学习
4、设计模式——单例模式
5、容器外网映射


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号